diff --git a/httprunner/__about__.py b/httprunner/__about__.py index 7e565489..aae10f4f 100644 --- a/httprunner/__about__.py +++ b/httprunner/__about__.py @@ -1,7 +1,7 @@ __title__ = 'HttpRunner' __description__ = 'One-stop solution for HTTP(S) testing.' __url__ = 'https://github.com/HttpRunner/HttpRunner' -__version__ = '1.3.5' +__version__ = '1.3.6' __author__ = 'debugtalk' __author_email__ = 'mail@debugtalk.com' __license__ = 'MIT' diff --git a/httprunner/client.py b/httprunner/client.py index 4d7ff73c..e7e72bb8 100644 --- a/httprunner/client.py +++ b/httprunner/client.py @@ -6,7 +6,6 @@ import time import requests import urllib3 from httprunner import logger -from httprunner.compat import str from httprunner.exception import ParamsError from requests import Request, Response from requests.exceptions import (InvalidSchema, InvalidURL, MissingSchema, @@ -116,14 +115,11 @@ class HttpSession(requests.Session): self.meta_data["request_body"] = response.request.body self.meta_data["status_code"] = response.status_code self.meta_data["response_headers"] = response.headers - - self.meta_data["response_body"] = response.text - if isinstance(self.meta_data["response_body"], str): - self.meta_data["response_body"] = self.meta_data["response_body"].encode("utf-8") + self.meta_data["response_content"] = response.content logger.log_debug("response status_code: {}".format(self.meta_data["status_code"])) logger.log_debug("response headers: {}".format(self.meta_data["response_headers"])) - logger.log_debug("response body: {}".format(self.meta_data["response_body"])) + logger.log_debug("response content: {}".format(self.meta_data["response_content"])) # get the length of the content, but if the argument stream is set to True, we take # the size from the content-length header, in order to not trigger fetching of the body diff --git a/httprunner/report.py b/httprunner/report.py index cadb1ba0..870ad5ab 100644 --- a/httprunner/report.py +++ b/httprunner/report.py @@ -9,6 +9,7 @@ from datetime import datetime from httprunner import logger from httprunner.__about__ import __version__ +from httprunner.compat import basestring, bytes, numeric_types from jinja2 import Template from requests.structures import CaseInsensitiveDict @@ -61,6 +62,9 @@ def make_json_serializable(raw_json): value = value.decode("utf-8") elif isinstance(value, CaseInsensitiveDict): value = dict(value) + elif not isinstance(value, (basestring, numeric_types)): + # class instance, e.g. MultipartEncoder() + value = repr(value) serializable_json[key] = value @@ -148,9 +152,6 @@ class HtmlTestResult(unittest.TextTestResult): else: logger.log_info("render with html report template: {}".format(html_report_template)) - with open(html_report_template, "r") as fp: - template_content = fp.read() - summary = self.summary logger.log_info("Start to render Html report ...") logger.log_debug("render data: {}".format(summary)) @@ -168,10 +169,12 @@ class HtmlTestResult(unittest.TextTestResult): if not os.path.isdir(report_dir_path): os.makedirs(report_dir_path) - report_path = os.path.join(report_dir_path, html_report_name) - with io.open(report_path, 'w', encoding='utf-8') as fp: - rendered_content = Template(template_content).render(summary) - fp.write(rendered_content) + with io.open(html_report_template, "r", encoding='utf-8') as fp_r: + template_content = fp_r.read() + report_path = os.path.join(report_dir_path, html_report_name) + with io.open(report_path, 'w', encoding='utf-8') as fp_w: + rendered_content = Template(template_content).render(summary) + fp_w.write(rendered_content) logger.log_info("Generated Html report: {}".format(report_path))