From 8f55bead99ca910b9c01f223ec5701e35d3ed1fb Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 23 Apr 2020 15:43:55 +0800 Subject: [PATCH] refactor: change variable name from meta_data to session_data --- httprunner/client.py | 65 +++++++++++++++++----------------- httprunner/report/stringify.py | 20 +++++------ httprunner/runner.py | 4 +-- httprunner/v3/runner.py | 10 +++--- httprunner/v3/schema.py | 14 ++++---- 5 files changed, 54 insertions(+), 59 deletions(-) diff --git a/httprunner/client.py b/httprunner/client.py index 41e12129..93a9f01e 100644 --- a/httprunner/client.py +++ b/httprunner/client.py @@ -11,7 +11,7 @@ from requests.exceptions import (InvalidSchema, InvalidURL, MissingSchema, from httprunner import response from httprunner.utils import lower_dict_keys, omit_long_data -from httprunner.v3.schema import MetaData, RequestStat +from httprunner.v3.schema import SessionData, RequestStat urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -103,36 +103,36 @@ class HttpSession(requests.Session): """ def __init__(self): super(HttpSession, self).__init__() - self.init_meta_data() + self.data = SessionData() - def init_meta_data(self): - """ initialize meta_data, it will store detail data of request and response + def init_session_data(self): + """ initialize session data, it will store detail data of request and response """ - self.meta_data = MetaData( - data=[ - { - "request": { - "url": "N/A", - "method": "N/A", - "headers": {} - }, - "response": { - "status_code": "N/A", - "headers": {}, - "encoding": None, - "content_type": "" - } + self.data.name = "" + self.data.req_resp = [ + { + "request": { + "url": "N/A", + "method": "N/A", + "headers": {} + }, + "response": { + "status_code": "N/A", + "headers": {}, + "encoding": None, + "content_type": "" } - ], - stat=RequestStat() - ) + } + ] + self.data.validators = {} + self.data.stat = RequestStat() def update_last_req_resp_record(self, resp_obj): """ update request and response info from Response() object. """ - self.meta_data.data.pop() - self.meta_data.data.append(get_req_resp_record(resp_obj)) + self.data.req_resp.pop() + self.data.req_resp.append(get_req_resp_record(resp_obj)) def request(self, method, url, name=None, **kwargs): """ @@ -173,16 +173,15 @@ class HttpSession(requests.Session): :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. """ - self.init_meta_data() - + self.init_session_data() # record test name - self.meta_data.name = name + self.data.name = name # record original request info - self.meta_data.data[0]["request"]["method"] = method - self.meta_data.data[0]["request"]["url"] = url + self.data.req_resp[0]["request"]["method"] = method + self.data.req_resp[0]["request"]["url"] = url kwargs.setdefault("timeout", 120) - self.meta_data.data[0]["request"].update(kwargs) + self.data.req_resp[0]["request"].update(kwargs) start_timestamp = time.time() response = self._send_request_safe_mode(method, url, **kwargs) @@ -196,13 +195,13 @@ class HttpSession(requests.Session): content_size = len(response.content or "") # record the consumed time - self.meta_data.stat.response_time_ms = response_time_ms - self.meta_data.stat.elapsed_ms = response.elapsed.microseconds / 1000.0 - self.meta_data.stat.content_size = content_size + self.data.stat.response_time_ms = response_time_ms + self.data.stat.elapsed_ms = response.elapsed.microseconds / 1000.0 + self.data.stat.content_size = content_size # record request and response histories, include 30X redirection response_list = response.history + [response] - self.meta_data.data = [ + self.data.req_resp = [ get_req_resp_record(resp_obj) for resp_obj in response_list ] diff --git a/httprunner/report/stringify.py b/httprunner/report/stringify.py index 45badb33..88bb4406 100644 --- a/httprunner/report/stringify.py +++ b/httprunner/report/stringify.py @@ -6,7 +6,7 @@ from typing import List from jinja2 import escape from requests.cookies import RequestsCookieJar -from httprunner.v3.schema import TestSuiteSummary, MetaData +from httprunner.v3.schema import TestSuiteSummary, SessionData def dumps_json(value): @@ -144,7 +144,7 @@ def __stringify_response(response_data): response_data[key] = value -def __get_total_response_time(step_datas: List[MetaData]): +def __get_total_response_time(step_datas: List[SessionData]): """ caculate total response time of all step_datas """ try: @@ -159,15 +159,6 @@ def __get_total_response_time(step_datas: List[MetaData]): return "N/A" -def __stringify_meta_datas(step_datas: List[MetaData]): - - for step_data in step_datas: - data_list = step_data.data - for data in data_list: - __stringify_request(data["request"]) - __stringify_response(data["response"]) - - def stringify_summary(testsuite_summary: TestSuiteSummary): """ stringify summary, in order to dump json file and generate html report. """ @@ -177,5 +168,10 @@ def stringify_summary(testsuite_summary: TestSuiteSummary): testcase_summary.name = f"testcase {index}" step_datas = testcase_summary.step_datas - __stringify_meta_datas(step_datas) + for session_data in step_datas: + req_resp_list = session_data.req_resp + for req_resp in req_resp_list: + __stringify_request(req_resp["request"]) + __stringify_response(req_resp["response"]) + testcase_summary.total_response_time = __get_total_response_time(step_datas) diff --git a/httprunner/runner.py b/httprunner/runner.py index 9617db4c..c56604a0 100644 --- a/httprunner/runner.py +++ b/httprunner/runner.py @@ -96,7 +96,7 @@ class Runner(object): if not isinstance(self.http_client_session, HttpSession): return - self.http_client_session.init_meta_data() + self.http_client_session.init_session_data() def _handle_skip_feature(self, test_dict): """ handle skip feature for test @@ -388,7 +388,7 @@ class Runner(object): raise finally: # get request/response data and validate results - self.meta_datas = getattr(self.http_client_session, "meta_data", {}) + self.meta_datas = getattr(self.http_client_session, "data", {}) self.meta_datas["validators"] = self.validation_results def export_variables(self, output_variables_list): diff --git a/httprunner/v3/runner.py b/httprunner/v3/runner.py index 764d1647..c948ea5d 100644 --- a/httprunner/v3/runner.py +++ b/httprunner/v3/runner.py @@ -7,7 +7,7 @@ from httprunner.client import HttpSession from httprunner.exceptions import ValidationFailure from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping from httprunner.v3.response import ResponseObject -from httprunner.v3.schema import TestsConfig, TestStep, VariablesMapping, TestCase, MetaData +from httprunner.v3.schema import TestsConfig, TestStep, VariablesMapping, TestCase, SessionData class TestCaseRunner(object): @@ -15,7 +15,7 @@ class TestCaseRunner(object): config: TestsConfig = {} teststeps: List[TestStep] = [] session: HttpSession = None - step_datas: List[MetaData] = [] + step_datas: List[SessionData] = [] validation_results: Dict = {} def init(self, testcase: TestCase) -> "TestCaseRunner": @@ -92,9 +92,9 @@ class TestCaseRunner(object): finally: self.validation_results = resp_obj.validation_results # save request & response meta data - self.session.meta_data.validators = self.validation_results - self.session.meta_data.name = step.name - self.step_datas.append(self.session.meta_data) + self.session.data.validators = self.validation_results + self.session.data.name = step.name + self.step_datas.append(self.session.data) return extract_mapping diff --git a/httprunner/v3/schema.py b/httprunner/v3/schema.py index 5278838e..96cc8aea 100644 --- a/httprunner/v3/schema.py +++ b/httprunner/v3/schema.py @@ -94,15 +94,15 @@ class TestCaseInOut(BaseModel): class RequestStat(BaseModel): - content_size: Text = "N/A" - response_time_ms: Text = "N/A" - elapsed_ms: Text = "N/A" + content_size: float = 0 + response_time_ms: float = 0 + elapsed_ms: float = 0 -class MetaData(BaseModel): +class SessionData(BaseModel): name: Text = "" - data: List[Dict] - stat: RequestStat + req_resp: List[Dict] = [] + stat: RequestStat = RequestStat() validators: Dict = {} @@ -114,7 +114,7 @@ class TestCaseSummary(BaseModel): time: TestCaseTime in_out: TestCaseInOut = {} log: Text = "" - step_datas: List[MetaData] = [] + step_datas: List[SessionData] = [] total_response_time: Text = "N/A"