refactor: split validate from context, move to validator

This commit is contained in:
debugtalk
2019-12-05 18:17:11 +08:00
parent 18aff9d0b7
commit e4755a80d5
4 changed files with 202 additions and 320 deletions

View File

@@ -5,6 +5,7 @@ from unittest.case import SkipTest
from httprunner import exceptions, logger, response, utils
from httprunner.client import HttpSession
from httprunner.context import SessionContext
from httprunner.validator import Validator
class Runner(object):
@@ -87,16 +88,6 @@ class Runner(object):
self.http_client_session.init_meta_data()
def __get_test_data(self):
""" get request/response data and validate results
"""
if not isinstance(self.http_client_session, HttpSession):
return
meta_data = self.http_client_session.meta_data
meta_data["validators"] = self.session_context.validation_results
return meta_data
def _handle_skip_feature(self, test_dict):
""" handle skip feature for test
- skip: skip current test unconditionally
@@ -267,7 +258,6 @@ class Runner(object):
self.session_context.update_session_variables(extracted_variables_mapping)
# validate
# TODO: split validate from context
validators = test_dict.get("validate") or test_dict.get("validators") or []
validate_script = test_dict.get("validate_script", [])
if validate_script:
@@ -276,8 +266,9 @@ class Runner(object):
"script": validate_script
})
validator = Validator(self.session_context, resp_obj)
try:
self.session_context.validate(validators, resp_obj)
validator.validate(validators)
except (exceptions.ParamsError,
exceptions.ValidationFailure, exceptions.ExtractFailure):
err_msg = "{} DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32)
@@ -302,6 +293,11 @@ 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["validators"] = validator.validation_results
def _run_testcase(self, testcase_dict):
""" run single testcase.
"""
@@ -385,8 +381,6 @@ class Runner(object):
self.exception_request_type = test_dict["request"]["method"]
self.exception_name = test_dict.get("name")
raise
finally:
self.meta_datas = self.__get_test_data()
def export_variables(self, output_variables_list):
""" export current testcase variables
@@ -397,8 +391,8 @@ class Runner(object):
for variable in output_variables_list:
if variable not in variables_mapping:
logger.log_warning(
"variable '{}' can not be found in variables mapping, failed to export!"\
.format(variable)
"variable '{}' can not be found in variables mapping, "
"failed to export!".format(variable)
)
continue