From 5219f7800ff2e872ceb8925f0ebf7f3ae2978793 Mon Sep 17 00:00:00 2001 From: httprunner Date: Tue, 27 Mar 2018 22:39:43 +0800 Subject: [PATCH] fix #131: parameter data driven with pair keys --- httprunner/__about__.py | 2 +- httprunner/testcase.py | 15 +++++++++++---- tests/data/demo_parameters.yml | 5 ++++- tests/test_runner.py | 4 ++-- tests/test_testcase.py | 6 +++++- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/httprunner/__about__.py b/httprunner/__about__.py index aae10f4f..b1564c26 100644 --- a/httprunner/__about__.py +++ b/httprunner/__about__.py @@ -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' diff --git a/httprunner/testcase.py b/httprunner/testcase.py index f3727924..15bc0ad8 100644 --- a/httprunner/testcase.py +++ b/httprunner/testcase.py @@ -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) diff --git a/tests/data/demo_parameters.yml b/tests/data/demo_parameters.yml index 8dac2e08..148afb87 100644 --- a/tests/data/demo_parameters.yml +++ b/tests/data/demo_parameters.yml @@ -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} diff --git a/tests/test_runner.py b/tests/test_runner.py index 8b1ed7f9..fa1cb33b 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -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) diff --git a/tests/test_testcase.py b/tests/test_testcase.py index db324aad..4d1518f3 100644 --- a/tests/test_testcase.py +++ b/tests/test_testcase.py @@ -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 = [