refactor: change variable name from meta_data to session_data

This commit is contained in:
debugtalk
2020-04-23 15:43:55 +08:00
parent 54ba20136a
commit d866a30e7e
5 changed files with 54 additions and 59 deletions

View File

@@ -11,7 +11,7 @@ from requests.exceptions import (InvalidSchema, InvalidURL, MissingSchema,
from httprunner import response from httprunner import response
from httprunner.utils import lower_dict_keys, omit_long_data 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) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@@ -103,36 +103,36 @@ class HttpSession(requests.Session):
""" """
def __init__(self): def __init__(self):
super(HttpSession, self).__init__() super(HttpSession, self).__init__()
self.init_meta_data() self.data = SessionData()
def init_meta_data(self): def init_session_data(self):
""" initialize meta_data, it will store detail data of request and response """ initialize session data, it will store detail data of request and response
""" """
self.meta_data = MetaData( self.data.name = ""
data=[ self.data.req_resp = [
{ {
"request": { "request": {
"url": "N/A", "url": "N/A",
"method": "N/A", "method": "N/A",
"headers": {} "headers": {}
}, },
"response": { "response": {
"status_code": "N/A", "status_code": "N/A",
"headers": {}, "headers": {},
"encoding": None, "encoding": None,
"content_type": "" "content_type": ""
}
} }
], }
stat=RequestStat() ]
) self.data.validators = {}
self.data.stat = RequestStat()
def update_last_req_resp_record(self, resp_obj): def update_last_req_resp_record(self, resp_obj):
""" """
update request and response info from Response() object. update request and response info from Response() object.
""" """
self.meta_data.data.pop() self.data.req_resp.pop()
self.meta_data.data.append(get_req_resp_record(resp_obj)) self.data.req_resp.append(get_req_resp_record(resp_obj))
def request(self, method, url, name=None, **kwargs): def request(self, method, url, name=None, **kwargs):
""" """
@@ -173,16 +173,15 @@ 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.
""" """
self.init_meta_data() self.init_session_data()
# record test name # record test name
self.meta_data.name = name self.data.name = name
# record original request info # record original request info
self.meta_data.data[0]["request"]["method"] = method self.data.req_resp[0]["request"]["method"] = method
self.meta_data.data[0]["request"]["url"] = url self.data.req_resp[0]["request"]["url"] = url
kwargs.setdefault("timeout", 120) kwargs.setdefault("timeout", 120)
self.meta_data.data[0]["request"].update(kwargs) self.data.req_resp[0]["request"].update(kwargs)
start_timestamp = time.time() start_timestamp = time.time()
response = self._send_request_safe_mode(method, url, **kwargs) response = self._send_request_safe_mode(method, url, **kwargs)
@@ -196,13 +195,13 @@ class HttpSession(requests.Session):
content_size = len(response.content or "") content_size = len(response.content or "")
# record the consumed time # record the consumed time
self.meta_data.stat.response_time_ms = response_time_ms self.data.stat.response_time_ms = response_time_ms
self.meta_data.stat.elapsed_ms = response.elapsed.microseconds / 1000.0 self.data.stat.elapsed_ms = response.elapsed.microseconds / 1000.0
self.meta_data.stat.content_size = content_size self.data.stat.content_size = content_size
# record request and response histories, include 30X redirection # record request and response histories, include 30X redirection
response_list = response.history + [response] response_list = response.history + [response]
self.meta_data.data = [ self.data.req_resp = [
get_req_resp_record(resp_obj) get_req_resp_record(resp_obj)
for resp_obj in response_list for resp_obj in response_list
] ]

View File

@@ -6,7 +6,7 @@ from typing import List
from jinja2 import escape from jinja2 import escape
from requests.cookies import RequestsCookieJar from requests.cookies import RequestsCookieJar
from httprunner.v3.schema import TestSuiteSummary, MetaData from httprunner.v3.schema import TestSuiteSummary, SessionData
def dumps_json(value): def dumps_json(value):
@@ -144,7 +144,7 @@ def __stringify_response(response_data):
response_data[key] = value 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 """ caculate total response time of all step_datas
""" """
try: try:
@@ -159,15 +159,6 @@ def __get_total_response_time(step_datas: List[MetaData]):
return "N/A" 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): def stringify_summary(testsuite_summary: TestSuiteSummary):
""" stringify summary, in order to dump json file and generate html report. """ 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}" testcase_summary.name = f"testcase {index}"
step_datas = testcase_summary.step_datas 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) testcase_summary.total_response_time = __get_total_response_time(step_datas)

View File

@@ -96,7 +96,7 @@ class Runner(object):
if not isinstance(self.http_client_session, HttpSession): if not isinstance(self.http_client_session, HttpSession):
return return
self.http_client_session.init_meta_data() self.http_client_session.init_session_data()
def _handle_skip_feature(self, test_dict): def _handle_skip_feature(self, test_dict):
""" handle skip feature for test """ handle skip feature for test
@@ -388,7 +388,7 @@ class Runner(object):
raise raise
finally: finally:
# get request/response data and validate results # 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 self.meta_datas["validators"] = self.validation_results
def export_variables(self, output_variables_list): def export_variables(self, output_variables_list):

View File

@@ -7,7 +7,7 @@ from httprunner.client import HttpSession
from httprunner.exceptions import ValidationFailure from httprunner.exceptions import ValidationFailure
from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping
from httprunner.v3.response import ResponseObject 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): class TestCaseRunner(object):
@@ -15,7 +15,7 @@ class TestCaseRunner(object):
config: TestsConfig = {} config: TestsConfig = {}
teststeps: List[TestStep] = [] teststeps: List[TestStep] = []
session: HttpSession = None session: HttpSession = None
step_datas: List[MetaData] = [] step_datas: List[SessionData] = []
validation_results: Dict = {} validation_results: Dict = {}
def init(self, testcase: TestCase) -> "TestCaseRunner": def init(self, testcase: TestCase) -> "TestCaseRunner":
@@ -92,9 +92,9 @@ class TestCaseRunner(object):
finally: finally:
self.validation_results = resp_obj.validation_results self.validation_results = resp_obj.validation_results
# save request & response meta data # save request & response meta data
self.session.meta_data.validators = self.validation_results self.session.data.validators = self.validation_results
self.session.meta_data.name = step.name self.session.data.name = step.name
self.step_datas.append(self.session.meta_data) self.step_datas.append(self.session.data)
return extract_mapping return extract_mapping

View File

@@ -94,15 +94,15 @@ class TestCaseInOut(BaseModel):
class RequestStat(BaseModel): class RequestStat(BaseModel):
content_size: Text = "N/A" content_size: float = 0
response_time_ms: Text = "N/A" response_time_ms: float = 0
elapsed_ms: Text = "N/A" elapsed_ms: float = 0
class MetaData(BaseModel): class SessionData(BaseModel):
name: Text = "" name: Text = ""
data: List[Dict] req_resp: List[Dict] = []
stat: RequestStat stat: RequestStat = RequestStat()
validators: Dict = {} validators: Dict = {}
@@ -114,7 +114,7 @@ class TestCaseSummary(BaseModel):
time: TestCaseTime time: TestCaseTime
in_out: TestCaseInOut = {} in_out: TestCaseInOut = {}
log: Text = "" log: Text = ""
step_datas: List[MetaData] = [] step_datas: List[SessionData] = []
total_response_time: Text = "N/A" total_response_time: Text = "N/A"