mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
bugfix #132: skip serialize class instance, e.g. MultipartEncoder
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user