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