From 2ec2d3c2d80104b8f05671a35c5ed8cfbd89d562 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 28 Nov 2018 12:11:50 +0800 Subject: [PATCH] make variables in testcase template compatible with mapping style: new mapping style: "variables": { "a": 1, "b": 2 } Also, the former list style is still valid: "variables": [ {"a": 1}, {"b": 2} ] --- httprunner/loader.py | 2 +- httprunner/parser.py | 3 +- httprunner/utils.py | 32 ++++++------- tests/api/basic.yml | 39 ++++++++-------- tests/data/bugfix_parameters.yml | 8 ++-- tests/data/demo_binds.yml | 10 ++-- tests/data/demo_parameters.yml | 14 +++--- tests/data/demo_testcase.yml | 6 +-- tests/data/demo_testcase_cli.yml | 4 +- tests/data/demo_testcase_functions.yml | 12 ++--- tests/data/demo_testcase_hardcode.yml | 4 +- tests/data/demo_testcase_layer.yml | 64 +++++++++++++------------- tests/data/demo_testcase_variables.yml | 14 +++--- tests/httpbin/upload.yml | 8 ++-- tests/test_api.py | 2 +- tests/test_loader.py | 12 ++--- tests/test_parser.py | 5 +- tests/testcases/create_and_check.yml | 20 ++++---- tests/testcases/setup.yml | 18 ++++---- tests/testsuites/create_users.yml | 6 +-- 20 files changed, 141 insertions(+), 142 deletions(-) diff --git a/httprunner/loader.py b/httprunner/loader.py index 6f147a53..5f56c261 100644 --- a/httprunner/loader.py +++ b/httprunner/loader.py @@ -9,7 +9,7 @@ import sys import yaml from httprunner import exceptions, logger, parser, utils, validator -from httprunner.compat import OrderedDict + ############################################################################### ## file loader diff --git a/httprunner/parser.py b/httprunner/parser.py index d3fb7a7e..419ad3e4 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -3,7 +3,6 @@ import ast import os import re -from collections import OrderedDict from httprunner import exceptions, utils from httprunner.compat import basestring, builtin_str, numeric_types, str @@ -524,7 +523,7 @@ def parse_data(content, variables_mapping=None, functions_mapping=None): for item in content ] - if isinstance(content, (dict, OrderedDict)): + if isinstance(content, dict): parsed_content = {} for key, value in content.items(): parsed_key = parse_data(key, variables_mapping, functions_mapping) diff --git a/httprunner/utils.py b/httprunner/utils.py index 81f2ba41..fcc5df2a 100644 --- a/httprunner/utils.py +++ b/httprunner/utils.py @@ -11,7 +11,7 @@ import string from datetime import datetime from httprunner import exceptions, logger -from httprunner.compat import OrderedDict, basestring, is_py2 +from httprunner.compat import basestring, is_py2 from httprunner.exceptions import ParamsError absolute_http_url_regexp = re.compile(r"^https?://", re.I) @@ -265,10 +265,10 @@ def ensure_mapping_format(variables): """ ensure variables are in mapping format. Args: - variables (list/dict/OrderedDict): original variables + variables (list/dict): original variables Returns: - OrderedDict: ensured variables in OrderedDict + dict: ensured variables in dict format Examples: >>> variables = [ @@ -276,19 +276,17 @@ def ensure_mapping_format(variables): {"b": 2} ] >>> print(ensure_mapping_format(variables)) - OrderDict( - { - "a": 1, - "b": 2 - } - ) + { + "a": 1, + "b": 2 + } """ if isinstance(variables, list): - variables_ordered_dict = OrderedDict() + variables_ordered_dict = {} for map_dict in variables: variables_ordered_dict.update(map_dict) - elif isinstance(variables, (OrderedDict, dict)): + elif isinstance(variables, dict): variables_ordered_dict = variables else: raise exceptions.ParamsError("variables format error!") @@ -377,17 +375,17 @@ def extend_variables(raw_variables, override_variables): override_variables (list): Returns: - OrderedDict: extended variables mapping + dict: extended variables mapping Examples: >>> raw_variables = [{"var1": "val1"}, {"var2": "val2"}] >>> override_variables = [{"var1": "val111"}, {"var3": "val3"}] >>> extend_variables(raw_variables, override_variables) - OrderedDict([ - ('var1', 'val111'), - ('var2', 'val2'), - ('var3', 'val3') - ]) + { + 'var1', 'val111', + 'var2', 'val2', + 'var3', 'val3' + } """ if not raw_variables: diff --git a/tests/api/basic.yml b/tests/api/basic.yml index d91c3301..d879887c 100644 --- a/tests/api/basic.yml +++ b/tests/api/basic.yml @@ -2,10 +2,11 @@ id: get_token name: get token variables: - - user_agent: XXX - - device_sn: API_XXX - - os_platform: XXX - - app_version: XXX + + user_agent: XXX + device_sn: API_XXX + os_platform: XXX + app_version: XXX request: url: /api/get-token method: POST @@ -26,10 +27,10 @@ - api: id: create_user variables: - - user_name: user0 - - user_password: "000000" - - uid: 9000 - - token: XXX + user_name: user0 + user_password: "000000" + uid: 9000 + token: XXX request: url: /api/users/$uid method: POST @@ -46,8 +47,8 @@ - api: id: get_user variables: - - uid: 9000 - - token: XXX + uid: 9000 + token: XXX request: url: /api/users/$uid method: GET @@ -61,10 +62,10 @@ - api: id: update_user variables: - - user_name: user0 - - user_password: "000000" - - uid: 9000 - - token: XXX + user_name: user0 + user_password: "000000" + uid: 9000 + token: XXX request: url: /api/users/$uid method: PUT @@ -81,8 +82,8 @@ - api: id: delete_user variables: - - uid: 9000 - - token: XXX + uid: 9000 + token: XXX request: url: /api/users/$uid method: DELETE @@ -96,7 +97,7 @@ - api: id: get_users variables: - - token: XXX + token: XXX request: url: /api/users method: GET @@ -110,7 +111,7 @@ - api: id: reset_all variables: - - token: XXX + token: XXX request: url: /api/reset-all method: GET @@ -125,7 +126,7 @@ - api: id: get_headers variables: - - n_secs: 1 + n_secs: 1 request: url: /headers headers: diff --git a/tests/data/bugfix_parameters.yml b/tests/data/bugfix_parameters.yml index 98a24c95..f35e24a7 100644 --- a/tests/data/bugfix_parameters.yml +++ b/tests/data/bugfix_parameters.yml @@ -2,10 +2,10 @@ - config: name: "user management testcase." variables: - - user_agent: 'iOS/10.3' - - device_sn: ${gen_random_string(15)} - - os_platform: 'ios' - - app_version: '2.8.6' + user_agent: 'iOS/10.3' + device_sn: ${gen_random_string(15)} + os_platform: 'ios' + app_version: '2.8.6' parameters: - user_agent: ['iOS', 'android'] request: diff --git a/tests/data/demo_binds.yml b/tests/data/demo_binds.yml index 17fbff68..43d1c3f9 100644 --- a/tests/data/demo_binds.yml +++ b/tests/data/demo_binds.yml @@ -1,10 +1,10 @@ bind_variables: variables: - - TOKEN: "debugtalk" - - token: $TOKEN + TOKEN: "debugtalk" + token: $TOKEN builtin_functions: variables: - - length: ${len(debugtalk)} - - smallest: ${min(2, 3, 8)} - - largest: ${max(2, 3, 8)} + length: ${len(debugtalk)} + smallest: ${min(2, 3, 8)} + largest: ${max(2, 3, 8)} diff --git a/tests/data/demo_parameters.yml b/tests/data/demo_parameters.yml index d43278b5..eef358af 100644 --- a/tests/data/demo_parameters.yml +++ b/tests/data/demo_parameters.yml @@ -1,16 +1,16 @@ - config: name: "user management testcase." parameters: - - user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"] - - username-password: + user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"] + username-password: - ["test1","111111"] - ["test2","222222"] variables: - - username: test1 - - user_agent: "iOS/10.1" - - device_sn: ${gen_random_string(15)} - - os_platform: 'ios' - - app_version: 2.8.5 + username: test1 + user_agent: "iOS/10.1" + device_sn: ${gen_random_string(15)} + os_platform: 'ios' + app_version: 2.8.5 base_url: ${get_base_url()} output: - token diff --git a/tests/data/demo_testcase.yml b/tests/data/demo_testcase.yml index 00fc96c9..f268403a 100644 --- a/tests/data/demo_testcase.yml +++ b/tests/data/demo_testcase.yml @@ -1,9 +1,9 @@ - config: name: "123$var_a" variables: - - var_a: 0 - - var_c: "${sum_two(1, 2)}" - - PROJECT_KEY: ${ENV(PROJECT_KEY)} + var_a: 0 + var_c: "${sum_two(1, 2)}" + PROJECT_KEY: ${ENV(PROJECT_KEY)} # parameters: # - "var_a-var_b": # - [11, 21] diff --git a/tests/data/demo_testcase_cli.yml b/tests/data/demo_testcase_cli.yml index 4d848c9e..56cb0ef3 100644 --- a/tests/data/demo_testcase_cli.yml +++ b/tests/data/demo_testcase_cli.yml @@ -12,8 +12,8 @@ json: sign: f1219719911caae89ccc301679857ebfda115ca2 variables: - - expect_status_code: 200 - - token_len: 16 + expect_status_code: 200 + token_len: 16 extract: - token: content.token validate: diff --git a/tests/data/demo_testcase_functions.yml b/tests/data/demo_testcase_functions.yml index 48e92f1f..43b1c55f 100644 --- a/tests/data/demo_testcase_functions.yml +++ b/tests/data/demo_testcase_functions.yml @@ -1,10 +1,10 @@ - config: name: "create user testcases." variables: - - user_agent: 'iOS/10.3' - - device_sn: ${gen_random_string(15)} - - os_platform: 'ios' - - app_version: '2.8.6' + user_agent: 'iOS/10.3' + device_sn: ${gen_random_string(15)} + os_platform: 'ios' + app_version: '2.8.6' base_url: ${get_base_url()} - test: @@ -28,8 +28,8 @@ - test: name: create user which does not exist variables: - - user_name: "user1" - - user_password: "123456" + user_name: "user1" + user_password: "123456" request: url: /api/users/1000 method: POST diff --git a/tests/data/demo_testcase_hardcode.yml b/tests/data/demo_testcase_hardcode.yml index eed5e38e..c1285c60 100644 --- a/tests/data/demo_testcase_hardcode.yml +++ b/tests/data/demo_testcase_hardcode.yml @@ -12,8 +12,8 @@ json: sign: f1219719911caae89ccc301679857ebfda115ca2 variables: - - expect_status_code: 200 - - token_len: 16 + expect_status_code: 200 + token_len: 16 extract: - token: content.token validate: diff --git a/tests/data/demo_testcase_layer.yml b/tests/data/demo_testcase_layer.yml index 49c2b0bc..a0ee8555 100644 --- a/tests/data/demo_testcase_layer.yml +++ b/tests/data/demo_testcase_layer.yml @@ -1,10 +1,10 @@ - config: name: "user management testcase." variables: - - user_agent: 'iOS/10.3' - - device_sn: ${gen_random_string(15)} - - os_platform: 'ios' - - app_version: '2.8.6' + user_agent: 'iOS/10.3' + device_sn: ${gen_random_string(15)} + os_platform: 'ios' + app_version: '2.8.6' base_url: ${get_base_url()} output: - token @@ -23,7 +23,7 @@ name: reset all users api: reset_all variables: - - token: $token + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.success", "expect": true} @@ -32,8 +32,8 @@ name: get user that does not exist api: get_user variables: - - uid: 1000 - - token: $token + uid: 1000 + token: $token validate: - {"check": "status_code", "expect": 404} - {"check": "content.success", "expect": false} @@ -41,10 +41,10 @@ - test: name: create user which does not exist variables: - - uid: 1000 - - user_name: "user1" - - user_password: "123456" - - token: $token + uid: 1000 + user_name: "user1" + user_password: "123456" + token: $token api: create_user validate: - {"check": "status_code", "expect": 201} @@ -54,8 +54,8 @@ name: get user that has been created api: get_user variables: - - uid: 1000 - - token: $token + uid: 1000 + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.success", "expect": true} @@ -64,10 +64,10 @@ - test: name: create user which exists variables: - - uid: 1000 - - user_name: "user1" - - user_password: "123456" - - token: $token + uid: 1000 + user_name: "user1" + user_password: "123456" + token: $token api: create_user validate: - {"check": "status_code", "expect": 500} @@ -76,10 +76,10 @@ - test: name: update user which exists variables: - - uid: 1000 - - user_name: "user1" - - user_password: "654321" - - token: $token + uid: 1000 + user_name: "user1" + user_password: "654321" + token: $token api: update_user validate: - {"check": "status_code", "expect": 200} @@ -89,8 +89,8 @@ name: get user that has been updated api: get_user variables: - - uid: 1000 - - token: $token + uid: 1000 + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.success", "expect": true} @@ -100,7 +100,7 @@ name: get users api: get_users variables: - - token: $token + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.count", "expect": 1} @@ -109,8 +109,8 @@ name: delete user that exists api: delete_user variables: - - uid: 1000 - - token: $token + uid: 1000 + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.success", "expect": true} @@ -119,7 +119,7 @@ name: get users api: get_users variables: - - token: $token + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.count", "expect": 0} @@ -127,10 +127,10 @@ - test: name: create user which has been deleted variables: - - uid: 1000 - - user_name: "user1" - - user_password: "123456" - - token: $token + uid: 1000 + user_name: "user1" + user_password: "123456" + token: $token api: create_user validate: - {"check": "status_code", "expect": 201} @@ -140,7 +140,7 @@ name: get users api: get_users variables: - - token: $token + token: $token validate: - {"check": "status_code", "expect": 200} - {"check": "content.count", "expect": 1} diff --git a/tests/data/demo_testcase_variables.yml b/tests/data/demo_testcase_variables.yml index e9ec4925..3119b1fa 100644 --- a/tests/data/demo_testcase_variables.yml +++ b/tests/data/demo_testcase_variables.yml @@ -1,16 +1,16 @@ - config: name: "create user testcases." variables: - - device_sn: 'HZfFBh6tU59EdXJ' + device_sn: 'HZfFBh6tU59EdXJ' base_url: ${get_base_url()} - test: name: get token variables: - - user_agent: 'iOS/10.3' - - os_platform: 'ios' - - app_version: '2.8.6' - - sign: f1219719911caae89ccc301679857ebfda115ca2 + user_agent: 'iOS/10.3' + os_platform: 'ios' + app_version: '2.8.6' + sign: f1219719911caae89ccc301679857ebfda115ca2 request: url: /api/get-token method: POST @@ -31,8 +31,8 @@ - test: name: create user which does not exist variables: - - user_name: "user1" - - user_password: "123456" + user_name: "user1" + user_password: "123456" request: url: /api/users/1000 method: POST diff --git a/tests/httpbin/upload.yml b/tests/httpbin/upload.yml index 3ac423c5..3abd8c76 100644 --- a/tests/httpbin/upload.yml +++ b/tests/httpbin/upload.yml @@ -5,10 +5,10 @@ - test: name: upload file variables: - - field_name: "file" - - file_path: "LICENSE" - - file_type: "text/html" - - multipart_encoder: ${multipart_encoder($field_name, $file_path, $file_type)} + field_name: "file" + file_path: "LICENSE" + file_type: "text/html" + multipart_encoder: ${multipart_encoder($field_name, $file_path, $file_type)} request: url: /post method: POST diff --git a/tests/test_api.py b/tests/test_api.py index c0a5b71c..93cf445f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -419,7 +419,7 @@ class TestApi(ApiServerUnittest): self.assertEqual(len(testcase_tests), 2) self.assertIn("api", testcase_tests[0]) self.assertEqual(testcase_tests[0]["name"], "get token (setup)") - self.assertIsInstance(testcase_tests[0]["variables"], list) + self.assertIsInstance(testcase_tests[0]["variables"], dict) self.assertIn("api_def", testcase_tests[0]) self.assertEqual(testcase_tests[0]["api_def"]["request"]["url"], "/api/get-token") diff --git a/tests/test_loader.py b/tests/test_loader.py index 64d160c1..3e2b66b6 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -247,11 +247,11 @@ class TestModuleLoader(unittest.TestCase): tests_mapping["project_mapping"]["functions"] ) self.assertEqual( - testcases[0]["config"]["variables"][1]["var_c"], + testcases[0]["config"]["variables"]["var_c"], "${sum_two(1, 2)}" ) self.assertEqual( - testcases[0]["config"]["variables"][2]["PROJECT_KEY"], + testcases[0]["config"]["variables"]["PROJECT_KEY"], "${ENV(PROJECT_KEY)}" ) @@ -287,7 +287,7 @@ class TestSuiteLoader(unittest.TestCase): raw_testcase = loader.load_file("tests/testsuites/create_users.yml") testcase = loader.load_testcase(raw_testcase) self.assertEqual(testcase["config"]["name"], "create users with uid") - self.assertIn("device_sn", testcase["config"]["variables"][0]) + self.assertIn("device_sn", testcase["config"]["variables"]) self.assertEqual(len(testcase["tests"]), 2) self.assertEqual(testcase["tests"][0]["name"], "create user 1000 and check result.") self.assertEqual(testcase["tests"][0]["testcase_def"]["config"]["name"], "create user and check result.") @@ -378,7 +378,7 @@ class TestSuiteLoader(unittest.TestCase): tests_mapping = loader.load_tests(path) project_mapping = tests_mapping["project_mapping"] testcases_list = tests_mapping["testcases"] - self.assertIn({'device_sn': '${gen_random_string(15)}'}, testcases_list[0]["config"]["variables"]) + self.assertIn('device_sn', testcases_list[0]["config"]["variables"]) self.assertIn("gen_md5", project_mapping["functions"]) self.assertIn("base_url", testcases_list[0]["config"]) test_dict0 = testcases_list[0]["tests"][0] @@ -405,7 +405,7 @@ class TestSuiteLoader(unittest.TestCase): ) self.assertEqual( {'device_sn': '${gen_random_string(15)}'}, - testcases_list[0]["config"]["variables"][0] + testcases_list[0]["config"]["variables"] ) testcase0 = testcases_list[0]["tests"][0] self.assertEqual( @@ -424,7 +424,7 @@ class TestSuiteLoader(unittest.TestCase): ) self.assertEqual( {'uid': 1001}, - testcase1["variables"][0] + testcase1["variables"] ) def test_load_folder_content(self): diff --git a/tests/test_parser.py b/tests/test_parser.py index e0aa0bbf..6d0e84e6 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -435,11 +435,11 @@ class TestParser(unittest.TestCase): tests_mapping = loader.load_tests(testcase_file_path) testcases = tests_mapping["testcases"] self.assertEqual( - testcases[0]["config"]["variables"][1]["var_c"], + testcases[0]["config"]["variables"]["var_c"], "${sum_two(1, 2)}" ) self.assertEqual( - testcases[0]["config"]["variables"][2]["PROJECT_KEY"], + testcases[0]["config"]["variables"]["PROJECT_KEY"], "${ENV(PROJECT_KEY)}" ) parser.parse_tests(tests_mapping) @@ -478,6 +478,7 @@ class TestParser(unittest.TestCase): } parser.parse_tests(tests_mapping) test_dict1_variables = tests_mapping["testcases"][0]["tests"][0]["variables"] + self.assertEqual(test_dict1_variables["creator"], "user_test_001") self.assertEqual(test_dict1_variables["username"], "user_test_001") def test_parse_environ(self): diff --git a/tests/testcases/create_and_check.yml b/tests/testcases/create_and_check.yml index 959a9da3..5a3c22a8 100644 --- a/tests/testcases/create_and_check.yml +++ b/tests/testcases/create_and_check.yml @@ -3,8 +3,8 @@ name: "create user and check result." id: create_and_check variables: - - uid: 9001 - - device_sn: "TESTCASE_CREATE_XXX" + uid: 9001 + device_sn: "TESTCASE_CREATE_XXX" base_url: "http://127.0.0.1:5000" - test: @@ -17,8 +17,8 @@ name: make sure user $uid does not exist api: get_user variables: - - uid: $uid - - token: $token + uid: $uid + token: $token validate: - eq: ["status_code", 404] - eq: ["content.success", false] @@ -27,10 +27,10 @@ name: create user $uid api: create_user variables: - - user_name: "user1" - - user_password: "123456" - - uid: $uid - - token: $token + user_name: "user1" + user_password: "123456" + uid: $uid + token: $token validate: - eq: ["status_code", 201] - eq: ["content.success", true] @@ -39,8 +39,8 @@ name: check if user $uid exists api: get_user variables: - - uid: $uid - - token: $token + uid: $uid + token: $token validate: - eq: ["status_code", 200] - eq: ["content.success", true] diff --git a/tests/testcases/setup.yml b/tests/testcases/setup.yml index 96522ca9..cdb57455 100644 --- a/tests/testcases/setup.yml +++ b/tests/testcases/setup.yml @@ -2,10 +2,10 @@ name: "setup and reset all." id: setup_and_reset variables: - - user_agent: 'iOS/10.3' - - device_sn: "TESTCASE_SETUP_XXX" - - os_platform: 'ios' - - app_version: '2.8.6' + user_agent: 'iOS/10.3' + device_sn: "TESTCASE_SETUP_XXX" + os_platform: 'ios' + app_version: '2.8.6' base_url: "http://127.0.0.1:5000" verify: False output: @@ -15,10 +15,10 @@ name: get token (setup) api: get_token variables: - - user_agent: 'iOS/10.3' - - device_sn: $device_sn - - os_platform: 'ios' - - app_version: '2.8.6' + user_agent: 'iOS/10.3' + device_sn: $device_sn + os_platform: 'ios' + app_version: '2.8.6' extract: - token: content.token validate: @@ -29,4 +29,4 @@ name: reset all users api: reset_all variables: - - token: $token + token: $token diff --git a/tests/testsuites/create_users.yml b/tests/testsuites/create_users.yml index 0e344a2e..9234b328 100644 --- a/tests/testsuites/create_users.yml +++ b/tests/testsuites/create_users.yml @@ -1,17 +1,17 @@ - config: name: create users with uid variables: - - device_sn: ${gen_random_string(15)} + device_sn: ${gen_random_string(15)} base_url: "http://127.0.0.1:5000" - test: name: create user 1000 and check result. testcase: testcases/create_and_check.yml variables: - - uid: 1000 + uid: 1000 - test: name: create user 1001 and check result. testcase: testcases/create_and_check.yml variables: - - uid: 1001 + uid: 1001