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 3bc124ddff
commit 8f55bead99
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.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
]

View File

@@ -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)

View File

@@ -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):

View File

@@ -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

View File

@@ -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"