fix #188: display response image in html report

This commit is contained in:
debugtalk
2018-04-22 13:29:41 +08:00
parent 36ce0b6dee
commit 84f5000d7a
4 changed files with 63 additions and 3 deletions

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,10 +114,18 @@ 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):
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)): elif not isinstance(body, (basestring, numeric_types, Iterable)):
# class instance, e.g. MultipartEncoder() # class instance, e.g. MultipartEncoder()

View File

@@ -245,7 +245,11 @@
<tr> <tr>
<th>body</th> <th>body</th>
<td> <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> </td>
</tr> </tr>
</table> </table>

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]

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)