mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-04 23:16:57 +08:00
update parameterize feature:
def get_user_agent():
return ["iOS/10.1", "iOS/10.2"]
def get_account_in_tuple():
return [("user1", "111111"), ("user2", "222222")]
This commit is contained in:
+24
-7
@@ -315,16 +315,33 @@ def parse_parameters(parameters, variables_mapping=None, functions_mapping=None)
|
|||||||
else:
|
else:
|
||||||
# (2) & (3)
|
# (2) & (3)
|
||||||
parsed_parameter_content = parse_data(parameter_content, variables_mapping, functions_mapping)
|
parsed_parameter_content = parse_data(parameter_content, variables_mapping, functions_mapping)
|
||||||
# e.g. [{'app_version': '2.8.5'}, {'app_version': '2.8.6'}]
|
|
||||||
# e.g. [{"username": "user1", "password": "111111"}, {"username": "user2", "password": "222222"}]
|
|
||||||
if not isinstance(parsed_parameter_content, list):
|
if not isinstance(parsed_parameter_content, list):
|
||||||
raise exceptions.ParamsError("parameters syntax error!")
|
raise exceptions.ParamsError("parameters syntax error!")
|
||||||
|
|
||||||
parameter_content_list = [
|
parameter_content_list = []
|
||||||
# get subset by parameter name
|
for parameter_item in parsed_parameter_content:
|
||||||
{key: parameter_item[key] for key in parameter_name_list}
|
if isinstance(parameter_item, dict):
|
||||||
for parameter_item in parsed_parameter_content
|
# get subset by parameter name
|
||||||
]
|
# {"app_version": "${gen_app_version()}"}
|
||||||
|
# gen_app_version() => [{'app_version': '2.8.5'}, {'app_version': '2.8.6'}]
|
||||||
|
# {"username-password": "${get_account()}"}
|
||||||
|
# get_account() => [
|
||||||
|
# {"username": "user1", "password": "111111"},
|
||||||
|
# {"username": "user2", "password": "222222"}
|
||||||
|
# ]
|
||||||
|
parameter_dict = {key: parameter_item[key] for key in parameter_name_list}
|
||||||
|
elif isinstance(parameter_item, (list, tuple)):
|
||||||
|
# {"username-password": "${get_account()}"}
|
||||||
|
# get_account() => [("user1", "111111"), ("user2", "222222")]
|
||||||
|
parameter_dict = dict(zip(parameter_name_list, parameter_item))
|
||||||
|
elif len(parameter_name_list) == 1:
|
||||||
|
# {"user_agent": "${get_user_agent()}"}
|
||||||
|
# get_user_agent() => ["iOS/10.1", "iOS/10.2"]
|
||||||
|
parameter_dict = {
|
||||||
|
parameter_name_list[0]: parameter_item
|
||||||
|
}
|
||||||
|
|
||||||
|
parameter_content_list.append(parameter_dict)
|
||||||
|
|
||||||
parsed_parameters_list.append(parameter_content_list)
|
parsed_parameters_list.append(parameter_content_list)
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ def skip_test_in_production_env():
|
|||||||
"""
|
"""
|
||||||
return os.environ["TEST_ENV"] == "PRODUCTION"
|
return os.environ["TEST_ENV"] == "PRODUCTION"
|
||||||
|
|
||||||
|
def get_user_agent():
|
||||||
|
return ["iOS/10.1", "iOS/10.2"]
|
||||||
|
|
||||||
def gen_app_version():
|
def gen_app_version():
|
||||||
return [
|
return [
|
||||||
{"app_version": "2.8.5"},
|
{"app_version": "2.8.5"},
|
||||||
@@ -57,6 +60,9 @@ def get_account():
|
|||||||
{"username": "user2", "password": "222222"}
|
{"username": "user2", "password": "222222"}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_account_in_tuple():
|
||||||
|
return [("user1", "111111"), ("user2", "222222")]
|
||||||
|
|
||||||
def gen_random_string(str_len):
|
def gen_random_string(str_len):
|
||||||
random_char_list = []
|
random_char_list = []
|
||||||
for _ in range(str_len):
|
for _ in range(str_len):
|
||||||
|
|||||||
+15
-2
@@ -376,8 +376,10 @@ class TestParser(unittest.TestCase):
|
|||||||
|
|
||||||
def test_parse_parameters_custom_function(self):
|
def test_parse_parameters_custom_function(self):
|
||||||
parameters = [
|
parameters = [
|
||||||
|
{"user_agent": "${get_user_agent()}"},
|
||||||
{"app_version": "${gen_app_version()}"},
|
{"app_version": "${gen_app_version()}"},
|
||||||
{"username-password": "${get_account()}"}
|
{"username-password": "${get_account()}"},
|
||||||
|
{"username2-password2": "${get_account_in_tuple()}"}
|
||||||
]
|
]
|
||||||
dot_env_path = os.path.join(
|
dot_env_path = os.path.join(
|
||||||
os.getcwd(), "tests", ".env"
|
os.getcwd(), "tests", ".env"
|
||||||
@@ -388,9 +390,20 @@ class TestParser(unittest.TestCase):
|
|||||||
parameters,
|
parameters,
|
||||||
functions_mapping=loader.load_module_functions(debugtalk)
|
functions_mapping=loader.load_module_functions(debugtalk)
|
||||||
)
|
)
|
||||||
|
self.assertIn(
|
||||||
|
{
|
||||||
|
'user_agent': 'iOS/10.1',
|
||||||
|
'app_version': '2.8.5',
|
||||||
|
'username': 'user1',
|
||||||
|
'password': '111111',
|
||||||
|
'username2': 'user1',
|
||||||
|
'password2': '111111'
|
||||||
|
},
|
||||||
|
cartesian_product_parameters
|
||||||
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
len(cartesian_product_parameters),
|
len(cartesian_product_parameters),
|
||||||
2 * 2
|
2 * 2 * 2 * 2
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_parse_parameters_parameterize(self):
|
def test_parse_parameters_parameterize(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user