diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 492e365c..3a7debdb 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,9 +2,15 @@ ## 2.4.4 (2019-12-17) +**Added** + +- feat: add keyword `body` to reference response body + **Changed** -- refactor: dumps request and response headers/body, display indented json in report +- refactor: dumps request/response headers, display indented json in html report +- refactor: dumps request/response body if it is in json format, display indented json in html report +- change: unify response field(content/json/text) to `body` in html report ## 2.4.3 (2019-12-16) diff --git a/httprunner/__init__.py b/httprunner/__init__.py index ecce350e..6628c0d6 100644 --- a/httprunner/__init__.py +++ b/httprunner/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.4.3" +__version__ = "2.4.4" __description__ = "One-stop solution for HTTP(S) testing." __all__ = ["__version__", "__description__"] diff --git a/httprunner/client.py b/httprunner/client.py index 0a2af89e..1b5676e1 100644 --- a/httprunner/client.py +++ b/httprunner/client.py @@ -111,18 +111,18 @@ class HttpSession(requests.Session): if "image" in content_type: # response is image type, record bytes content only - req_resp_dict["response"]["content"] = resp_obj.content + req_resp_dict["response"]["body"] = resp_obj.content else: try: # try to record json data if isinstance(resp_obj, response.ResponseObject): - req_resp_dict["response"]["json"] = resp_obj.json + req_resp_dict["response"]["body"] = resp_obj.json else: - req_resp_dict["response"]["json"] = resp_obj.json() + req_resp_dict["response"]["body"] = resp_obj.json() except ValueError: # only record at most 512 text charactors resp_text = resp_obj.text - req_resp_dict["response"]["text"] = omit_long_data(resp_text) + req_resp_dict["response"]["body"] = omit_long_data(resp_text) # log response details in debug mode log_print(req_resp_dict, "response") diff --git a/httprunner/report.py b/httprunner/report.py index 82bebf3d..cc8e38c6 100644 --- a/httprunner/report.py +++ b/httprunner/report.py @@ -11,7 +11,7 @@ from jinja2 import Template, escape from requests.cookies import RequestsCookieJar from httprunner import __version__, logger -from httprunner.compat import basestring, bytes, json, numeric_types +from httprunner.compat import basestring, bytes, json, numeric_types, JSONDecodeError def get_platform(): @@ -163,6 +163,13 @@ def __stringify_request(request_data): except UnicodeDecodeError: pass + if key == "body": + try: + # request body is in json format + value = json.loads(value) + except JSONDecodeError: + pass + elif not isinstance(value, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() value = repr(value) @@ -211,7 +218,7 @@ def __stringify_response(response_data): if not encoding or encoding == "None": encoding = "utf-8" - if key == "content" and "image" in response_data["content_type"]: + if key == "body" and "image" in response_data["content_type"]: # display image value = "data:{};base64,{}".format( response_data["content_type"], diff --git a/httprunner/response.py b/httprunner/response.py index b6062e63..9de3a8cd 100644 --- a/httprunner/response.py +++ b/httprunner/response.py @@ -175,7 +175,7 @@ class ResponseObject(object): raise exceptions.ExtractFailure(err_msg) # response body - elif top_query in ["content", "text", "json"]: + elif top_query in ["body", "content", "text", "json"]: try: body = self.json except exceptions.JSONDecodeError: diff --git a/httprunner/static/report_template.html b/httprunner/static/report_template.html index f943172a..cef1ed19 100644 --- a/httprunner/static/report_template.html +++ b/httprunner/static/report_template.html @@ -250,14 +250,14 @@
{{ value | e }}
+ {% elif key == "body" %}
{% if "image" in req_resp.response.content_type %}
{{ value | e }}
+ {% endif %}
{% else %}
{{ value }}
{% endif %}
diff --git a/pyproject.toml b/pyproject.toml
index 07a071f9..d9603f96 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "httprunner"
-version = "2.4.3"
+version = "2.4.4"
description = "One-stop solution for HTTP(S) testing."
license = "Apache-2.0"
readme = "README.md"
diff --git a/tests/test_api.py b/tests/test_api.py
index e8711ecd..1ce8884c 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -268,7 +268,7 @@ class TestHttpRunner(ApiServerUnittest):
self.assertTrue(summary["success"])
self.assertEqual(summary["stat"]["testcases"]["total"], 1)
self.assertEqual(summary["stat"]["teststeps"]["total"], 1)
- resp_json = json.loads(summary["details"][0]["records"][0]["meta_datas"]["data"][0]["response"]["json"])
+ resp_json = json.loads(summary["details"][0]["records"][0]["meta_datas"]["data"][0]["response"]["body"])
self.assertEqual(
resp_json["data"],
"abc"