From 0a3f5cc1466a8eb3c9782035e574287e67a76bb0 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Fri, 20 Apr 2018 22:00:56 +0800 Subject: [PATCH] fix #191: request data dumps --- httprunner/built_in.py | 2 +- tests/test_httprunner.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/httprunner/built_in.py b/httprunner/built_in.py index ebf46867..d5d69242 100644 --- a/httprunner/built_in.py +++ b/httprunner/built_in.py @@ -137,7 +137,7 @@ def setup_hook_prepare_kwargs(method, url, kwargs): content_type = kwargs.get("headers", {}).get("content-type") if content_type and "data" in kwargs: # if request content-type is application/json, request data should be dumped - if content_type.startswith("application/json"): + if content_type.startswith("application/json") and isinstance(kwargs["data"], (dict, list)): kwargs["data"] = json.dumps(kwargs["data"]) if isinstance(kwargs["data"], str): diff --git a/tests/test_httprunner.py b/tests/test_httprunner.py index c5a222d4..1ef82513 100644 --- a/tests/test_httprunner.py +++ b/tests/test_httprunner.py @@ -106,3 +106,36 @@ class TestHttpRunner(ApiServerUnittest): self.assertTrue(summary["success"]) self.assertEqual(summary["stat"]["testsRun"], 1) self.assertIn("records", summary) + + def test_run_post_data(self): + testsets = [ + { + "name": "post data", + "config": { + "path": "" + }, + + "testcases": [ + { + "name": "post data", + "request": { + "url": "https://httpbin.org/post", + "method": "POST", + "headers": { + "Content-Type": "application/json" + }, + "data": "abc" + }, + "validate": [ + {"eq": ["status_code", 200]} + ] + } + + ] + } + ] + runner = HttpRunner().run(testsets) + summary = runner.summary + self.assertTrue(summary["success"]) + self.assertEqual(summary["stat"]["testsRun"], 1) + self.assertEqual(summary["records"][0]["meta_data"]["response_body"]["data"], "abc")