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:
debugtalk
2018-12-17 20:16:52 +08:00
parent 73ba469b42
commit 94464c323a
3 changed files with 45 additions and 9 deletions

View File

@@ -315,16 +315,33 @@ def parse_parameters(parameters, variables_mapping=None, functions_mapping=None)
else:
# (2) & (3)
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):
raise exceptions.ParamsError("parameters syntax error!")
parameter_content_list = [
# get subset by parameter name
{key: parameter_item[key] for key in parameter_name_list}
for parameter_item in parsed_parameter_content
]
parameter_content_list = []
for parameter_item in parsed_parameter_content:
if isinstance(parameter_item, dict):
# 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)

View File

@@ -45,6 +45,9 @@ def skip_test_in_production_env():
"""
return os.environ["TEST_ENV"] == "PRODUCTION"
def get_user_agent():
return ["iOS/10.1", "iOS/10.2"]
def gen_app_version():
return [
{"app_version": "2.8.5"},
@@ -57,6 +60,9 @@ def get_account():
{"username": "user2", "password": "222222"}
]
def get_account_in_tuple():
return [("user1", "111111"), ("user2", "222222")]
def gen_random_string(str_len):
random_char_list = []
for _ in range(str_len):

View File

@@ -376,8 +376,10 @@ class TestParser(unittest.TestCase):
def test_parse_parameters_custom_function(self):
parameters = [
{"user_agent": "${get_user_agent()}"},
{"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(
os.getcwd(), "tests", ".env"
@@ -388,9 +390,20 @@ class TestParser(unittest.TestCase):
parameters,
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(
len(cartesian_product_parameters),
2 * 2
2 * 2 * 2 * 2
)
def test_parse_parameters_parameterize(self):