mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
fix variables priority: passed in > .env > debugtalk.py > parameters > config variables
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user