mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-11 18:11:21 +08:00
fix #188: display response image in html report
This commit is contained in:
@@ -5,6 +5,7 @@ import os
|
||||
import platform
|
||||
import time
|
||||
import unittest
|
||||
from base64 import b64encode
|
||||
from collections import Iterable, OrderedDict
|
||||
from datetime import datetime
|
||||
|
||||
@@ -113,10 +114,18 @@ def stringify_body(meta_data, request_or_response):
|
||||
body = json.dumps(dict(body), ensure_ascii=False)
|
||||
|
||||
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):
|
||||
body = body.decode("utf-8")
|
||||
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")
|
||||
|
||||
elif not isinstance(body, (basestring, numeric_types, Iterable)):
|
||||
# class instance, e.g. MultipartEncoder()
|
||||
|
||||
@@ -245,7 +245,11 @@
|
||||
<tr>
|
||||
<th>body</th>
|
||||
<td>
|
||||
<pre>{{ record.meta_data.response_body | safe }}</pre>
|
||||
{% if record.meta_data.response_data_type == "image" %}
|
||||
<img src="{{ record.meta_data.response_body }}" />
|
||||
{% else %}
|
||||
<pre>{{ record.meta_data.response_body | safe }}</pre>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
37
tests/httpbin/load_image.yml
Normal file
37
tests/httpbin/load_image.yml
Normal 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]
|
||||
|
||||
@@ -135,3 +135,13 @@ class TestHttpRunner(ApiServerUnittest):
|
||||
self.assertTrue(summary["success"])
|
||||
self.assertEqual(summary["stat"]["testsRun"], 1)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user