fix variables priority: passed in > .env > debugtalk.py > parameters > config variables

This commit is contained in:
debugtalk
2018-11-14 15:41:41 +08:00
parent d8c39da787
commit a9a82e52f3
4 changed files with 57 additions and 25 deletions

View File

@@ -933,10 +933,9 @@ def load_project_tests(test_path, dot_env_path=None):
"functions": {}
}
# TODO: add tests layer temporally, remove later.
project_mapping["def-api"] = load_api_folder(os.path.join(project_working_directory, "tests", "api"))
project_mapping["def-api"] = load_api_folder(os.path.join(project_working_directory, "api"))
# TODO: replace suite with testcases
project_mapping["def-testcase"] = load_test_folder(os.path.join(project_working_directory, "tests", "suite"))
project_mapping["def-testcase"] = load_test_folder(os.path.join(project_working_directory, "suite"))
return project_mapping

View File

@@ -629,24 +629,29 @@ def parse_tests(testcases, variables_mapping=None):
for parameter_mapping in cartesian_product_parameters_list:
testcase_dict = utils.deepcopy_dict(testcase)
config = testcase_dict.get("config")
# parse config variables
# get config variables
raw_config_variables = config.get("variables", [])
parsed_config_variables = parse_data(
raw_config_variables,
project_mapping["debugtalk"]["variables"],
project_mapping["debugtalk"]["functions"]
)
raw_config_variables_mapping = utils.ensure_mapping_format(raw_config_variables)
# priority: passed in > debugtalk.py > parameters > variables
# override variables mapping with parameters mapping
config_variables = utils.override_mapping_list(
parsed_config_variables, parameter_mapping)
# merge debugtalk.py module variables
# priority: passed in > .env > debugtalk.py > parameters > variables
config_variables = utils.deepcopy_dict(parameter_mapping)
config_variables.update(project_mapping["debugtalk"]["variables"])
# override variables mapping with passed in variables_mapping
config_variables = utils.override_mapping_list(
config_variables, variables_mapping)
config_variables.update(variables_mapping)
for key, value in raw_config_variables_mapping.items():
if key in config_variables:
# passed in & .env & parameters
continue
else:
# config variables
parsed_value = parse_data(
value,
config_variables,
project_mapping["debugtalk"]["functions"]
)
config_variables[key] = parsed_value
testcase_dict["config"]["variables"] = config_variables

View File

@@ -264,6 +264,39 @@ def update_ordered_dict(ordered_dict, override_mapping):
return new_ordered_dict
def ensure_mapping_format(variables):
""" ensure variables are in mapping format.
Args:
variables (list/dict/OrderedDict): original variables
Returns:
OrderedDict: ensured variables in OrderedDict
Examples:
>>> variables = [
{"a": 1},
{"b": 2}
]
>>> print(ensure_mapping_format(variables))
OrderDict(
{
"a": 1,
"b": 2
}
)
"""
if isinstance(variables, list):
variables_ordered_dict = convert_mappinglist_to_orderdict(variables)
elif isinstance(variables, (OrderedDict, dict)):
variables_ordered_dict = variables
else:
raise exceptions.ParamsError("variables format error!")
return variables_ordered_dict
def override_mapping_list(variables, new_mapping):
""" override variables with new mapping.
@@ -298,12 +331,7 @@ def override_mapping_list(variables, new_mapping):
)
"""
if isinstance(variables, list):
variables_ordered_dict = convert_mappinglist_to_orderdict(variables)
elif isinstance(variables, (OrderedDict, dict)):
variables_ordered_dict = variables
else:
raise exceptions.ParamsError("variables error!")
variables_ordered_dict = ensure_mapping_format(variables)
return update_ordered_dict(
variables_ordered_dict,

View File

@@ -565,7 +565,7 @@ class TestSuiteLoader(unittest.TestCase):
path = os.path.join(
os.getcwd(), 'tests/data/demo_locust.yml')
locust_tests = loader.load_locust_tests(path)
self.assertEqual(locust_tests["config"]["refs"]["env"]["UserName"], "debugtalk")
self.assertEqual(locust_tests["config"]["variables"]["UserName"], "debugtalk")
self.assertEqual(len(locust_tests["tests"]), 10)
self.assertEqual(locust_tests["tests"][0][0]["name"], "index")
self.assertEqual(locust_tests["tests"][9][0]["name"], "user-agent")