refactor names: simplify functions

This commit is contained in:
debugtalk
2018-02-16 01:41:16 +08:00
parent 182fbb6aeb
commit ec77183aa1
6 changed files with 65 additions and 72 deletions

View File

@@ -110,12 +110,12 @@ class Context(object):
variables = utils.convert_to_order_dict(variables)
for variable_name, value in variables.items():
variable_evale_value = self.testcase_parser.parse_content_with_bindings(value)
variable_eval_value = self.eval_content(value)
if level == "testset":
self.testset_shared_variables_mapping[variable_name] = variable_evale_value
self.testset_shared_variables_mapping[variable_name] = variable_eval_value
self.testcase_variables_mapping[variable_name] = variable_evale_value
self.testcase_variables_mapping[variable_name] = variable_eval_value
self.testcase_parser.update_binded_variables(self.testcase_variables_mapping)
def bind_extracted_variables(self, variables):
@@ -140,13 +140,19 @@ class Context(object):
self.testcase_functions_config.update(config_mapping)
self.testcase_parser.bind_functions(self.testcase_functions_config)
def eval_content(self, content):
""" evaluate content recursively, take effect on each variable and function in content.
content may be in any data structure, include dict, list, tuple, number, string, etc.
"""
return self.testcase_parser.eval_content_with_bindings(content)
def get_parsed_request(self, request_dict, level="testcase"):
""" get parsed request with bind variables and functions.
@param request_dict: request config mapping
@param level: testset or testcase
"""
if level == "testset":
request_dict = self.testcase_parser.parse_content_with_bindings(
request_dict = self.eval_content(
request_dict
)
self.testset_request_config.update(request_dict)
@@ -155,20 +161,12 @@ class Context(object):
copy.deepcopy(self.testset_request_config),
request_dict
)
parsed_request = self.testcase_parser.parse_content_with_bindings(
parsed_request = self.eval_content(
testcase_request_config
)
return parsed_request
def get_testcase_variables_mapping(self):
return self.testcase_variables_mapping
def exec_content_functions(self, content):
""" execute functions in content.
"""
return self.testcase_parser.eval_content_functions(content)
def eval_check_item(self, validator, resp_obj):
""" evaluate check item in validator
@param (dict) validator
@@ -190,7 +188,7 @@ class Context(object):
# 3, regex string, e.g. "LB[\d]*(.*)RB[\d]*"
if testcase.extract_variables(check_item):
# type 1
check_value = self.testcase_parser.eval_content_variables(check_item)
check_value = self.eval_content(check_item)
else:
try:
# type 2 or type 3
@@ -203,7 +201,7 @@ class Context(object):
# expect_value should only be in 2 types:
# 1, variable reference, e.g. $expect_status_code
# 2, actual value, e.g. 200
expect_value = self.testcase_parser.eval_content_variables(validator["expect"])
expect_value = self.eval_content(validator["expect"])
validator["expect"] = expect_value
return validator

View File

@@ -82,12 +82,12 @@ class Runner(object):
elif "skipIf" in testcase_dict:
skip_if_condition = testcase_dict["skipIf"]
if self.context.exec_content_functions(skip_if_condition):
if self.context.eval_content(skip_if_condition):
skip_reason = "{} evaluate to True".format(skip_if_condition)
elif "skipUnless" in testcase_dict:
skip_unless_condition = testcase_dict["skipUnless"]
if not self.context.exec_content_functions(skip_unless_condition):
if not self.context.eval_content(skip_unless_condition):
skip_reason = "{} evaluate to False".format(skip_unless_condition)
if skip_reason:
@@ -138,7 +138,7 @@ class Runner(object):
def setup_teardown(actions):
for action in actions:
self.context.exec_content_functions(action)
self.context.eval_content(action)
setup_teardown(setup_actions)
@@ -168,15 +168,10 @@ class Runner(object):
return True
def get_eval_content(self, content):
""" evaluate content with variable bindings
"""
return self.context.testcase_parser.parse_content_with_bindings(content)
def extract_output(self, output_variables_list):
""" extract output variables
"""
variables_mapping = self.context.get_testcase_variables_mapping()
variables_mapping = self.context.testcase_variables_mapping
output = {}
for variable in output_variables_list:

View File

@@ -72,7 +72,7 @@ class ApiTestSuite(unittest.TestSuite):
def _add_tests_to_suite(self, testcases):
for testcase_dict in testcases:
testcase_name = self.test_runner.get_eval_content(testcase_dict["name"])
testcase_name = self.test_runner.context.eval_content(testcase_dict["name"])
if utils.PYTHON_VERSION == 3:
ApiTestCase.runTest.__doc__ = testcase_name
else:

View File

@@ -717,7 +717,7 @@ class TestcaseParser(object):
raise exception.ParamsError(
"{} is not defined in bind {}s!".format(item_name, item_type))
def eval_content_functions(self, content):
def _eval_content_functions(self, content):
functions_list = extract_functions(content)
for func_content in functions_list:
function_meta = parse_function(func_content)
@@ -727,8 +727,8 @@ class TestcaseParser(object):
args = function_meta.get('args', [])
kwargs = function_meta.get('kwargs', {})
args = self.parse_content_with_bindings(args)
kwargs = self.parse_content_with_bindings(kwargs)
args = self.eval_content_with_bindings(args)
kwargs = self.eval_content_with_bindings(kwargs)
eval_value = func(*args, **kwargs)
func_content = "${" + func_content + "}"
@@ -744,7 +744,7 @@ class TestcaseParser(object):
return content
def eval_content_variables(self, content):
def _eval_content_variables(self, content):
""" replace all variables of string content with mapping value.
@param (str) content
@return (str) parsed content
@@ -775,7 +775,7 @@ class TestcaseParser(object):
return content
def parse_content_with_bindings(self, content):
def eval_content_with_bindings(self, content):
""" parse content recursively, each variable and function in content will be evaluated.
@param (dict) content in any data structure
@@ -806,15 +806,15 @@ class TestcaseParser(object):
if isinstance(content, (list, tuple)):
return [
self.parse_content_with_bindings(item)
self.eval_content_with_bindings(item)
for item in content
]
if isinstance(content, dict):
evaluated_data = {}
for key, value in content.items():
eval_key = self.parse_content_with_bindings(key)
eval_value = self.parse_content_with_bindings(value)
eval_key = self.eval_content_with_bindings(key)
eval_value = self.eval_content_with_bindings(value)
evaluated_data[eval_key] = eval_value
return evaluated_data
@@ -826,10 +826,10 @@ class TestcaseParser(object):
content = "" if content is None else content.strip()
# replace functions with evaluated value
# Notice: eval_content_functions must be called before eval_content_variables
content = self.eval_content_functions(content)
# Notice: _eval_content_functions must be called before _eval_content_variables
content = self._eval_content_functions(content)
# replace variables with binding value
content = self.eval_content_variables(content)
content = self._eval_content_variables(content)
return content