mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-28 19:47:14 +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": {}
|
"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
@@ -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
@@ -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,
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user