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
+2 -3
View File
@@ -933,10 +933,9 @@ def load_project_tests(test_path, dot_env_path=None):
"functions": {} "functions": {}
} }
# TODO: add tests layer temporally, remove later. project_mapping["def-api"] = load_api_folder(os.path.join(project_working_directory, "api"))
project_mapping["def-api"] = load_api_folder(os.path.join(project_working_directory, "tests", "api"))
# TODO: replace suite with testcases # 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 return project_mapping
+20 -15
View File
@@ -629,24 +629,29 @@ def parse_tests(testcases, variables_mapping=None):
for parameter_mapping in cartesian_product_parameters_list: for parameter_mapping in cartesian_product_parameters_list:
testcase_dict = utils.deepcopy_dict(testcase) testcase_dict = utils.deepcopy_dict(testcase)
config = testcase_dict.get("config") config = testcase_dict.get("config")
# get config variables
# parse config variables
raw_config_variables = config.get("variables", []) raw_config_variables = config.get("variables", [])
parsed_config_variables = parse_data( raw_config_variables_mapping = utils.ensure_mapping_format(raw_config_variables)
raw_config_variables,
project_mapping["debugtalk"]["variables"],
project_mapping["debugtalk"]["functions"]
)
# priority: passed in > debugtalk.py > parameters > variables # priority: passed in > .env > debugtalk.py > parameters > variables
# override variables mapping with parameters mapping
config_variables = utils.override_mapping_list( config_variables = utils.deepcopy_dict(parameter_mapping)
parsed_config_variables, parameter_mapping)
# merge debugtalk.py module variables
config_variables.update(project_mapping["debugtalk"]["variables"]) config_variables.update(project_mapping["debugtalk"]["variables"])
# override variables mapping with passed in variables_mapping config_variables.update(variables_mapping)
config_variables = utils.override_mapping_list(
config_variables, 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 testcase_dict["config"]["variables"] = config_variables
+34 -6
View File
@@ -264,6 +264,39 @@ def update_ordered_dict(ordered_dict, override_mapping):
return new_ordered_dict 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): def override_mapping_list(variables, new_mapping):
""" override variables with 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 = ensure_mapping_format(variables)
variables_ordered_dict = convert_mappinglist_to_orderdict(variables)
elif isinstance(variables, (OrderedDict, dict)):
variables_ordered_dict = variables
else:
raise exceptions.ParamsError("variables error!")
return update_ordered_dict( return update_ordered_dict(
variables_ordered_dict, variables_ordered_dict,
+1 -1
View File
@@ -565,7 +565,7 @@ class TestSuiteLoader(unittest.TestCase):
path = os.path.join( path = os.path.join(
os.getcwd(), 'tests/data/demo_locust.yml') os.getcwd(), 'tests/data/demo_locust.yml')
locust_tests = loader.load_locust_tests(path) 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(len(locust_tests["tests"]), 10)
self.assertEqual(locust_tests["tests"][0][0]["name"], "index") self.assertEqual(locust_tests["tests"][0][0]["name"], "index")
self.assertEqual(locust_tests["tests"][9][0]["name"], "user-agent") self.assertEqual(locust_tests["tests"][9][0]["name"], "user-agent")