bugfix #132: skip serialize class instance, e.g. MultipartEncoder

This commit is contained in:
debugtalk
2018-03-27 15:56:08 +08:00
parent 94db1acc80
commit f5600aea03
3 changed files with 13 additions and 14 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -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))