extract meta data of request and bind it to testcase

This commit is contained in:
debugtalk
2018-02-26 00:19:02 +08:00
parent e8ce54864b
commit 02d41c4e51
3 changed files with 18 additions and 15 deletions
+15 -14
View File
@@ -122,11 +122,11 @@ class HttpSession(requests.Session):
logger.log_info("{method} {url}".format(method=method, url=url)) logger.log_info("{method} {url}".format(method=method, url=url))
logger.log_debug("request kwargs(raw): {kwargs}".format(kwargs=kwargs)) logger.log_debug("request kwargs(raw): {kwargs}".format(kwargs=kwargs))
# store meta data that is used when reporting the request to locust's statistics # store meta data that is used when reporting the request to locust's statistics
request_meta = {} meta_data = {}
# set up pre_request hook for attaching meta data to the request object # set up pre_request hook for attaching meta data to the request object
request_meta["method"] = method meta_data["method"] = method
request_meta["start_time"] = time.time() meta_data["request_time"] = time.time()
if "httpntlmauth" in kwargs: if "httpntlmauth" in kwargs:
from requests_ntlm import HttpNtlmAuth from requests_ntlm import HttpNtlmAuth
@@ -137,24 +137,24 @@ class HttpSession(requests.Session):
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)
request_meta["url"] = (response.history and response.history[0] or response)\ meta_data["url"] = (response.history and response.history[0] or response)\
.request.path_url .request.path_url
# record the consumed time # record the consumed time
request_meta["response_time"] = int((time.time() - request_meta["start_time"]) * 1000) meta_data["response_time"] = int((time.time() - meta_data["request_time"]) * 1000)
# 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
if kwargs.get("stream", False): if kwargs.get("stream", False):
request_meta["content_size"] = int(response.headers.get("content-length") or 0) meta_data["content_size"] = int(response.headers.get("content-length") or 0)
else: else:
request_meta["content_size"] = len(response.content or "") meta_data["content_size"] = len(response.content or "")
request_meta["request_headers"] = response.request.headers meta_data["request_headers"] = response.request.headers
request_meta["request_body"] = response.request.body meta_data["request_body"] = response.request.body
request_meta["status_code"] = response.status_code meta_data["status_code"] = response.status_code
request_meta["response_headers"] = response.headers meta_data["response_headers"] = response.headers
request_meta["response_content"] = response.content meta_data["response_body"] = response.text
logger.log_debug("response status_code: {}".format(response.status_code)) logger.log_debug("response status_code: {}".format(response.status_code))
logger.log_debug("response headers: {}".format(response.headers)) logger.log_debug("response headers: {}".format(response.headers))
@@ -167,9 +167,10 @@ class HttpSession(requests.Session):
else: else:
logger.log_info( logger.log_info(
"""status_code: {}, response_time: {} ms, response_length: {} bytes"""\ """status_code: {}, response_time: {} ms, response_length: {} bytes"""\
.format(request_meta["status_code"], request_meta["response_time"], \ .format(meta_data["status_code"], meta_data["response_time"], \
request_meta["content_size"])) meta_data["content_size"]))
self.meta_data = meta_data
return response return response
def _send_request_safe_mode(self, method, url, **kwargs): def _send_request_safe_mode(self, method, url, **kwargs):
+2
View File
@@ -173,6 +173,8 @@ class Runner(object):
finally: finally:
setup_teardown(teardown_actions) setup_teardown(teardown_actions)
return getattr(self.http_client_session, "meta_data", {})
def extract_output(self, output_variables_list): def extract_output(self, output_variables_list):
""" extract output variables """ extract output variables
""" """
+1 -1
View File
@@ -16,7 +16,7 @@ class TestCase(unittest.TestCase):
def runTest(self): def runTest(self):
""" run testcase and check result. """ run testcase and check result.
""" """
self.test_runner.run_test(self.testcase_dict) self.meta_data = self.test_runner.run_test(self.testcase_dict)
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.