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
+1 -1
View File
@@ -1,7 +1,7 @@
__title__ = 'HttpRunner' __title__ = 'HttpRunner'
__description__ = 'One-stop solution for HTTP(S) testing.' __description__ = 'One-stop solution for HTTP(S) testing.'
__url__ = 'https://github.com/HttpRunner/HttpRunner' __url__ = 'https://github.com/HttpRunner/HttpRunner'
__version__ = '1.3.5' __version__ = '1.3.6'
__author__ = 'debugtalk' __author__ = 'debugtalk'
__author_email__ = 'mail@debugtalk.com' __author_email__ = 'mail@debugtalk.com'
__license__ = 'MIT' __license__ = 'MIT'
+2 -6
View File
@@ -6,7 +6,6 @@ import time
import requests import requests
import urllib3 import urllib3
from httprunner import logger from httprunner import logger
from httprunner.compat import str
from httprunner.exception import ParamsError from httprunner.exception import ParamsError
from requests import Request, Response from requests import Request, Response
from requests.exceptions import (InvalidSchema, InvalidURL, MissingSchema, 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["request_body"] = response.request.body
self.meta_data["status_code"] = response.status_code self.meta_data["status_code"] = response.status_code
self.meta_data["response_headers"] = response.headers self.meta_data["response_headers"] = response.headers
self.meta_data["response_content"] = response.content
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")
logger.log_debug("response status_code: {}".format(self.meta_data["status_code"])) 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 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 # 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 # the size from the content-length header, in order to not trigger fetching of the body
+8 -5
View File
@@ -9,6 +9,7 @@ from datetime import datetime
from httprunner import logger from httprunner import logger
from httprunner.__about__ import __version__ from httprunner.__about__ import __version__
from httprunner.compat import basestring, bytes, numeric_types
from jinja2 import Template from jinja2 import Template
from requests.structures import CaseInsensitiveDict from requests.structures import CaseInsensitiveDict
@@ -61,6 +62,9 @@ def make_json_serializable(raw_json):
value = value.decode("utf-8") value = value.decode("utf-8")
elif isinstance(value, CaseInsensitiveDict): elif isinstance(value, CaseInsensitiveDict):
value = dict(value) value = dict(value)
elif not isinstance(value, (basestring, numeric_types)):
# class instance, e.g. MultipartEncoder()
value = repr(value)
serializable_json[key] = value serializable_json[key] = value
@@ -148,9 +152,6 @@ class HtmlTestResult(unittest.TextTestResult):
else: else:
logger.log_info("render with html report template: {}".format(html_report_template)) 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 summary = self.summary
logger.log_info("Start to render Html report ...") logger.log_info("Start to render Html report ...")
logger.log_debug("render data: {}".format(summary)) logger.log_debug("render data: {}".format(summary))
@@ -168,10 +169,12 @@ class HtmlTestResult(unittest.TextTestResult):
if not os.path.isdir(report_dir_path): if not os.path.isdir(report_dir_path):
os.makedirs(report_dir_path) os.makedirs(report_dir_path)
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) report_path = os.path.join(report_dir_path, html_report_name)
with io.open(report_path, 'w', encoding='utf-8') as fp: with io.open(report_path, 'w', encoding='utf-8') as fp_w:
rendered_content = Template(template_content).render(summary) rendered_content = Template(template_content).render(summary)
fp.write(rendered_content) fp_w.write(rendered_content)
logger.log_info("Generated Html report: {}".format(report_path)) logger.log_info("Generated Html report: {}".format(report_path))