fix #188: display response image in html report

This commit is contained in:
httprunner
2018-04-22 13:29:41 +08:00
parent d8c326296d
commit e1bcb74c5f
4 changed files with 63 additions and 3 deletions
+10 -1
View File
@@ -5,6 +5,7 @@ import os
import platform import platform
import time import time
import unittest import unittest
from base64 import b64encode
from collections import Iterable, OrderedDict from collections import Iterable, OrderedDict
from datetime import datetime from datetime import datetime
@@ -113,9 +114,17 @@ def stringify_body(meta_data, request_or_response):
body = json.dumps(dict(body), ensure_ascii=False) body = json.dumps(dict(body), ensure_ascii=False)
elif isinstance(body, (dict, list)): elif isinstance(body, (dict, list)):
body = json.dumps(body, ensure_ascii=False) body = json.dumps(body, indent=2, ensure_ascii=False)
elif isinstance(body, bytes): elif isinstance(body, bytes):
resp_content_type = headers.get("Content-Type", "")
if "image" in resp_content_type:
meta_data["response_data_type"] = "image"
body = "data:{};base64,{}".format(
resp_content_type,
b64encode(body).decode('utf-8')
)
else:
body = body.decode("utf-8") body = body.decode("utf-8")
elif not isinstance(body, (basestring, numeric_types, Iterable)): elif not isinstance(body, (basestring, numeric_types, Iterable)):
@@ -245,7 +245,11 @@
<tr> <tr>
<th>body</th> <th>body</th>
<td> <td>
{% if record.meta_data.response_data_type == "image" %}
<img src="{{ record.meta_data.response_body }}" />
{% else %}
<pre>{{ record.meta_data.response_body | safe }}</pre> <pre>{{ record.meta_data.response_body | safe }}</pre>
{% endif %}
</td> </td>
</tr> </tr>
</table> </table>
+37
View File
@@ -0,0 +1,37 @@
- config:
name: load images
request:
base_url: https://httpbin.org
- test:
name: get png image
request:
url: /image/png
method: GET
validators:
- eq: ["status_code", 200]
- test:
name: get jpeg image
request:
url: /image/jpeg
method: GET
validators:
- eq: ["status_code", 200]
- test:
name: get webp image
request:
url: /image/webp
method: GET
validators:
- eq: ["status_code", 200]
- test:
name: get svg image
request:
url: /image/svg
method: GET
validators:
- eq: ["status_code", 200]
+10
View File
@@ -135,3 +135,13 @@ class TestHttpRunner(ApiServerUnittest):
self.assertTrue(summary["success"]) self.assertTrue(summary["success"])
self.assertEqual(summary["stat"]["testsRun"], 1) self.assertEqual(summary["stat"]["testsRun"], 1)
self.assertEqual(summary["records"][0]["meta_data"]["response_body"]["data"], "abc") self.assertEqual(summary["records"][0]["meta_data"]["response_body"]["data"], "abc")
def test_html_report_repsonse_image(self):
testset_path = "tests/httpbin/load_image.yml"
runner = HttpRunner().run(testset_path)
summary = runner.summary
output_folder_name = os.path.basename(os.path.splitext(testset_path)[0])
report = runner.gen_html_report(html_report_name=output_folder_name)
self.assertTrue(os.path.isfile(report))
report_save_dir = os.path.join(os.getcwd(), 'reports', output_folder_name)
shutil.rmtree(report_save_dir)