mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
refactor: change variable name from meta_data to session_data
This commit is contained in:
@@ -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
|
||||
]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user