diff --git a/httprunner/loader.py b/httprunner/loader.py index 35e8b4d7..9b48991c 100644 --- a/httprunner/loader.py +++ b/httprunner/loader.py @@ -443,7 +443,7 @@ def load_testcase(raw_testcase): def load_testcase_v2(raw_testcase): - """ load testcase in version 2. + """ load testcase in format version 2. Args: raw_testcase (dict): raw testcase content loaded from JSON/YAML file: @@ -482,13 +482,15 @@ def load_testcase_v2(raw_testcase): def load_testsuite(raw_testsuite): """ load testsuite with testcase references. + support two different formats. Args: raw_testsuite (dict): raw testsuite content loaded from JSON/YAML file: + # version 1, compatible with version < 2.2.0 { "config": { - "name": "", - "request": {} + "name": "xxx", + "variables": {} } "testcases": { "testcase1": { @@ -500,6 +502,23 @@ def load_testsuite(raw_testsuite): } } + # version 2, implemented in 2.2.0 + { + "config": { + "name": "xxx", + "variables": {} + } + "testcases": [ + { + "name": "testcase1", + "testcase": "/path/to/testcase", + "variables": {...}, + "parameters": {...} + }, + {} + ] + } + Returns: dict: loaded testsuite content { @@ -508,10 +527,21 @@ def load_testsuite(raw_testsuite): } """ - testcases = raw_testsuite["testcases"] - for name, raw_testcase in testcases.items(): - __extend_with_testcase_ref(raw_testcase) - raw_testcase.setdefault("name", name) + raw_testcases = raw_testsuite.pop("testcases") + raw_testsuite["testcases"] = {} + + if isinstance(raw_testcases, dict): + # make compatible with version < 2.2.0 + for name, raw_testcase in raw_testcases.items(): + __extend_with_testcase_ref(raw_testcase) + raw_testcase.setdefault("name", name) + raw_testsuite["testcases"][name] = raw_testcase + elif isinstance(raw_testcases, list): + # format version 2, implemented in 2.2.0 + for raw_testcase in raw_testcases: + __extend_with_testcase_ref(raw_testcase) + testcase_name = raw_testcase["name"] + raw_testsuite["testcases"][testcase_name] = raw_testcase return raw_testsuite diff --git a/tests/test_loader.py b/tests/test_loader.py index b9d46f1d..b7ffbe27 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -316,17 +316,36 @@ class TestSuiteLoader(unittest.TestCase): self.assertEqual(len(loaded_content["teststeps"]), 2) def test_load_test_file_testsuite(self): - loaded_content = loader.load_test_file("tests/testsuites/create_users.yml") - self.assertEqual(loaded_content["type"], "testsuite") + for loaded_content in [ + loader.load_test_file("tests/testsuites/create_users.yml"), + loader.load_test_file("tests/testsuites/create_users.json") + ]: + self.assertEqual(loaded_content["type"], "testsuite") - testcases = loaded_content["testcases"] - self.assertEqual(len(testcases), 2) - self.assertIn('create user 1000 and check result.', testcases) - self.assertIn('testcase_def', testcases["create user 1000 and check result."]) - self.assertEqual( - testcases["create user 1000 and check result."]["testcase_def"]["config"]["name"], - "create user and check result." - ) + testcases = loaded_content["testcases"] + self.assertEqual(len(testcases), 2) + self.assertIn('create user 1000 and check result.', testcases) + self.assertIn('testcase_def', testcases["create user 1000 and check result."]) + self.assertEqual( + testcases["create user 1000 and check result."]["testcase_def"]["config"]["name"], + "create user and check result." + ) + + def test_load_test_file_testsuite_v2(self): + for loaded_content in [ + loader.load_test_file("tests/testsuites/create_users.v2.yml"), + loader.load_test_file("tests/testsuites/create_users.v2.json") + ]: + self.assertEqual(loaded_content["type"], "testsuite") + + testcases = loaded_content["testcases"] + self.assertEqual(len(testcases), 2) + self.assertIn('create user 1000 and check result.', testcases) + self.assertIn('testcase_def', testcases["create user 1000 and check result."]) + self.assertEqual( + testcases["create user 1000 and check result."]["testcase_def"]["config"]["name"], + "create user and check result." + ) def test_load_tests_api_file(self): path = os.path.join( diff --git a/tests/testsuites/create_users.json b/tests/testsuites/create_users.json new file mode 100644 index 00000000..d504c99f --- /dev/null +++ b/tests/testsuites/create_users.json @@ -0,0 +1,29 @@ +{ + "testcases": { + "create user 1001 and check result.": { + "testcase": "testcases/create_user.yml", + "variables": { + "var_d": "$var_c", + "var_c": "${gen_random_string(5)}", + "uid": 1001 + } + }, + "create user 1000 and check result.": { + "testcase": "testcases/create_user.yml", + "variables": { + "var_d": "$var_c", + "var_c": "${gen_random_string(5)}", + "uid": 1000 + } + } + }, + "config": { + "variables": { + "device_sn": "${gen_random_string(15)}", + "var_b": "$var_a", + "var_a": "${gen_random_string(5)}" + }, + "name": "create users with uid", + "base_url": "http://127.0.0.1:5000" + } +} \ No newline at end of file diff --git a/tests/testsuites/create_users.v2.json b/tests/testsuites/create_users.v2.json new file mode 100644 index 00000000..de4d5d27 --- /dev/null +++ b/tests/testsuites/create_users.v2.json @@ -0,0 +1,31 @@ +{ + "config": { + "variables": { + "device_sn": "${gen_random_string(15)}", + "var_b": "$var_a", + "var_a": "${gen_random_string(5)}" + }, + "name": "create users with uid", + "base_url": "http://127.0.0.1:5000" + }, + "testcases": [ + { + "name": "create user 1000 and check result.", + "testcase": "testcases/create_user.yml", + "variables": { + "var_d": "$var_c", + "var_c": "${gen_random_string(5)}", + "uid": 1000 + } + }, + { + "name": "create user 1001 and check result.", + "testcase": "testcases/create_user.yml", + "variables": { + "var_d": "$var_c", + "var_c": "${gen_random_string(5)}", + "uid": 1001 + } + } + ] +} \ No newline at end of file diff --git a/tests/testsuites/create_users.v2.yml b/tests/testsuites/create_users.v2.yml new file mode 100644 index 00000000..0714d82f --- /dev/null +++ b/tests/testsuites/create_users.v2.yml @@ -0,0 +1,24 @@ +config: + name: create users with uid + variables: + device_sn: ${gen_random_string(15)} + var_a: ${gen_random_string(5)} + var_b: $var_a + base_url: "http://127.0.0.1:5000" + +testcases: +- + name: create user 1000 and check result. + testcase: testcases/create_user.yml + variables: + uid: 1000 + var_c: ${gen_random_string(5)} + var_d: $var_c + +- + name: create user 1001 and check result. + testcase: testcases/create_user.yml + variables: + uid: 1001 + var_c: ${gen_random_string(5)} + var_d: $var_c