mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
fix #269: display the former url when the current testcase failed
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.4.7'
|
||||
__version__ = '1.4.8'
|
||||
__author__ = 'debugtalk'
|
||||
__author_email__ = 'mail@debugtalk.com'
|
||||
__license__ = 'MIT'
|
||||
|
||||
@@ -40,6 +40,7 @@ class HttpSession(requests.Session):
|
||||
def __init__(self, base_url=None, *args, **kwargs):
|
||||
super(HttpSession, self).__init__(*args, **kwargs)
|
||||
self.base_url = base_url if base_url else ""
|
||||
self.init_meta_data()
|
||||
|
||||
def _build_url(self, path):
|
||||
""" prepend url with hostname unless it's already an absolute URL """
|
||||
@@ -50,6 +51,23 @@ class HttpSession(requests.Session):
|
||||
else:
|
||||
raise ParamsError("base url missed!")
|
||||
|
||||
def init_meta_data(self):
|
||||
""" initialize meta_data, it will store detail data of request and response
|
||||
"""
|
||||
self.meta_data = {
|
||||
"url": "N/A",
|
||||
"method": "N/A",
|
||||
"request_time": "N/A",
|
||||
"request_headers": {},
|
||||
"request_body": "N/A",
|
||||
"status_code": "N/A",
|
||||
"response_headers": {},
|
||||
"response_body": "N/A",
|
||||
"content_size": "N/A",
|
||||
"response_time_ms": "N/A",
|
||||
"elapsed_ms": "N/A"
|
||||
}
|
||||
|
||||
def request(self, method, url, name=None, **kwargs):
|
||||
"""
|
||||
Constructs and sends a :py:class:`requests.Request`.
|
||||
@@ -89,43 +107,35 @@ class HttpSession(requests.Session):
|
||||
:param cert: (optional)
|
||||
if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
|
||||
"""
|
||||
# store detail data of request and response
|
||||
self.meta_data = {
|
||||
"url": url,
|
||||
"method": method,
|
||||
"request_time": time.time(),
|
||||
"request_headers": {},
|
||||
"request_body": "N/A",
|
||||
"status_code": "N/A",
|
||||
"response_headers": {},
|
||||
"response_body": "N/A",
|
||||
"content_size": "N/A",
|
||||
"response_time_ms": "N/A",
|
||||
"elapsed_ms": "N/A"
|
||||
}
|
||||
# record original request info
|
||||
self.meta_data["method"] = method
|
||||
self.meta_data["url"] = url
|
||||
self.meta_data["request_time"] = time.time()
|
||||
|
||||
# prepend url with hostname unless it's already an absolute URL
|
||||
url = self._build_url(url)
|
||||
|
||||
kwargs.setdefault("timeout", 120)
|
||||
response = self._send_request_safe_mode(method, url, **kwargs)
|
||||
|
||||
# record the consumed time
|
||||
self.meta_data["response_time_ms"] = round((time.time() - self.meta_data["request_time"]) * 1000, 2)
|
||||
self.meta_data["elapsed_ms"] = response.elapsed.microseconds / 1000.0
|
||||
|
||||
self.meta_data["url"] = (response.history and response.history[0] or response)\
|
||||
.request.url
|
||||
|
||||
# record actual request info
|
||||
self.meta_data["url"] = (response.history and response.history[0] or response).request.url
|
||||
self.meta_data["request_headers"] = response.request.headers
|
||||
self.meta_data["request_body"] = response.request.body
|
||||
|
||||
# record response info
|
||||
self.meta_data["status_code"] = response.status_code
|
||||
self.meta_data["response_headers"] = response.headers
|
||||
|
||||
try:
|
||||
self.meta_data["response_body"] = response.json()
|
||||
except ValueError:
|
||||
self.meta_data["response_body"] = response.content
|
||||
|
||||
# log response details in debug mode
|
||||
msg = "response details:\n"
|
||||
msg += "> status_code: {}\n".format(self.meta_data["status_code"])
|
||||
msg += "> headers: {}\n".format(self.meta_data["response_headers"])
|
||||
|
||||
@@ -25,7 +25,9 @@ class TestCase(unittest.TestCase):
|
||||
try:
|
||||
self.test_runner.run_test(self.testcase_dict)
|
||||
finally:
|
||||
self.meta_data = getattr(self.test_runner.http_client_session, "meta_data", {})
|
||||
if hasattr(self.test_runner.http_client_session, "meta_data"):
|
||||
self.meta_data = self.test_runner.http_client_session.meta_data
|
||||
self.test_runner.http_client_session.init_meta_data()
|
||||
|
||||
class TestSuite(unittest.TestSuite):
|
||||
""" create test suite with a testset, it may include one or several testcases.
|
||||
|
||||
Reference in New Issue
Block a user