fix #131: parameter data driven with pair keys

This commit is contained in:
httprunner
2018-03-27 22:39:43 +08:00
parent db0f07ae96
commit 5219f7800f
5 changed files with 23 additions and 9 deletions

View File

@@ -1,7 +1,7 @@
__title__ = 'HttpRunner'
__description__ = 'One-stop solution for HTTP(S) testing.'
__url__ = 'https://github.com/HttpRunner/HttpRunner'
__version__ = '1.3.6'
__version__ = '1.3.7'
__author__ = 'debugtalk'
__author_email__ = 'mail@debugtalk.com'
__license__ = 'MIT'

View File

@@ -652,10 +652,17 @@ def parse_parameters(parameters, testset_path=None):
# => [{"app_version": "2.8.5", "app_version": "2.8.6"}]
# e.g. {"username-password": [["user1", "111111"], ["test2", "222222"]}
# => [{"username": "user1", "password": "111111"}, {"username": "user2", "password": "222222"}]
parameter_content_list = [
dict(zip(parameter_name_list, [parameter_item]))
for parameter_item in parameter_content
]
parameter_content_list = []
for parameter_item in parameter_content:
if not isinstance(parameter_item, (list, tuple)):
# "2.8.5" => ["2.8.5"]
parameter_item = [parameter_item]
# ["app_version"], ["2.8.5"] => {"app_version": "2.8.5"}
# ["username", "password"], ["user1", "111111"] => {"username": "user1", "password": "111111"}
parameter_content_dict = dict(zip(parameter_name_list, parameter_item))
parameter_content_list.append(parameter_content_dict)
else:
# (2) & (3)
parsed_parameter_content = testcase_parser.eval_content_with_bindings(parameter_content)

View File

@@ -2,6 +2,9 @@
name: "user management testset."
parameters:
- user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
- username-password:
- ["test1","111111"]
- ["test2","222222"]
variables:
- device_sn: ${gen_random_string(15)}
- os_platform: 'ios'
@@ -28,7 +31,7 @@
# name: create user
# parameters:
# - user_id: [1001, 1002, 1003]
# - username-password: ${parameterize(account.csv)}
# - username-password: ${P(account.csv)}
# api: create_user($user_id, $username, $password, $token)
# validate:
# - {"check": "status_code", "expect": 201}

View File

@@ -165,5 +165,5 @@ class TestRunner(ApiServerUnittest):
os.getcwd(), 'tests/data/demo_parameters.yml')
result = HttpRunner(testcase_file_path).run()
self.assertTrue(result["success"])
self.assertEqual(len(result["output"]), 3 * 2)
self.assertEqual(result["stat"]["testsRun"], 3 * 2)
self.assertEqual(len(result["output"]), 3 * 2 * 2)
self.assertEqual(result["stat"]["testsRun"], 3 * 2 * 2)

View File

@@ -108,13 +108,17 @@ class TestcaseParserUnittest(unittest.TestCase):
def test_parse_parameters_raw_list(self):
parameters = [
{"user_agent": ["iOS/10.1", "iOS/10.2", "iOS/10.3"]},
{"username-password": [("user1", "111111"), ("test2", "222222")]}
{"username-password": [("user1", "111111"), ["test2", "222222"]]}
]
cartesian_product_parameters = testcase.parse_parameters(parameters)
self.assertEqual(
len(cartesian_product_parameters),
3 * 2
)
self.assertEqual(
cartesian_product_parameters[0],
{'user_agent': 'iOS/10.1', 'username': 'user1', 'password': '111111'}
)
def test_parse_parameters_parameterize(self):
parameters = [