diff --git a/CHANGELOG.md b/CHANGELOG.md index 36611042..d07c7b56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 2.2.2 (2019-06-26) + +**Features** + +- `extract` is used to replace `output` when passing former teststep's (as a testcase) export value to next teststep + ## 2.2.1 (2019-06-25) **Features** diff --git a/httprunner/__about__.py b/httprunner/__about__.py index df64ac93..2c14eaef 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__ = '2.2.1' +__version__ = '2.2.2' __author__ = 'debugtalk' __author_email__ = 'mail@debugtalk.com' __license__ = 'Apache-2.0' diff --git a/httprunner/parser.py b/httprunner/parser.py index a1e8a4f7..c0cce828 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -942,7 +942,13 @@ def __prepare_testcase_tests(tests, config, project_mapping, session_variables_s if "testcase_def" in test_dict: # test_dict is nested testcase - if "output" in test_dict: + # pass former teststep's (as a testcase) export value to next teststep + # Since V2.2.2, `extract` is used to replace `output`, + # `output` is also kept for compatibility + if "extract" in test_dict: + session_variables_set |= set(test_dict["extract"]) + elif "output" in test_dict: + # kept for compatibility session_variables_set |= set(test_dict["output"]) # 2, testcase test_dict => testcase_def config diff --git a/tests/test_api.py b/tests/test_api.py index db13b543..694ea9df 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -636,23 +636,28 @@ class TestApi(ApiServerUnittest): self.assertEqual(len(tests_results[0][1].records), 2) def test_testcase_complex_run_suite(self): - testcase_path = "tests/testcases/create_user.yml" - tests_mapping = loader.load_tests(testcase_path) - testcases = parser.parse_tests(tests_mapping) - runner = HttpRunner() - test_suite = runner._add_tests(testcases) - tests_results = runner._run_suite(test_suite) - self.assertEqual(len(tests_results[0][1].records), 2) + for testcase_path in [ + "tests/testcases/create_user.yml", + "tests/testcases/create_user.v2.yml", + "tests/testcases/create_user.json", + "tests/testcases/create_user.v2.json" + ]: + tests_mapping = loader.load_tests(testcase_path) + testcases = parser.parse_tests(tests_mapping) + runner = HttpRunner() + test_suite = runner._add_tests(testcases) + tests_results = runner._run_suite(test_suite) + self.assertEqual(len(tests_results[0][1].records), 2) - results = tests_results[0][1] - self.assertEqual( - results.records[0]["name"], - "setup and reset all (override) for TESTCASE_CREATE_XXX." - ) - self.assertEqual( - results.records[1]["name"], - "create user and check result." - ) + results = tests_results[0][1] + self.assertEqual( + results.records[0]["name"], + "setup and reset all (override) for TESTCASE_CREATE_XXX." + ) + self.assertEqual( + results.records[1]["name"], + "create user and check result." + ) def test_testsuite_loader(self): testcase_path = "tests/testsuites/create_users.yml" diff --git a/tests/test_loader.py b/tests/test_loader.py index b7ffbe27..be22a520 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -271,8 +271,7 @@ class TestSuiteLoader(unittest.TestCase): "testcase": "testcases/setup.yml", "variables": [ {"device_sn": "$device_sn"} - ], - "output": ["token", "device_sn"] + ] } testcase = loader.load_teststep(raw_test) self.assertEqual( diff --git a/tests/testcases/create_user.json b/tests/testcases/create_user.json new file mode 100644 index 00000000..30af7ce8 --- /dev/null +++ b/tests/testcases/create_user.json @@ -0,0 +1,34 @@ +[ + { + "config": { + "id": "create_user", + "variables": { + "device_sn": "TESTCASE_CREATE_XXX", + "uid": 9001 + }, + "output": [ + "session_token" + ], + "base_url": "http://127.0.0.1:5000", + "name": "create user and check result." + } + }, + { + "test": { + "testcase": "testcases/setup.yml", + "extract": [ + "session_token" + ], + "name": "setup and reset all (override) for $device_sn." + } + }, + { + "test": { + "testcase": "testcases/deps/check_and_create.yml", + "variables": { + "token": "$session_token" + }, + "name": "create user and check result." + } + } +] \ No newline at end of file diff --git a/tests/testcases/create_user.v2.json b/tests/testcases/create_user.v2.json new file mode 100644 index 00000000..12f537e9 --- /dev/null +++ b/tests/testcases/create_user.v2.json @@ -0,0 +1,30 @@ +{ + "config": { + "id": "create_user", + "variables": { + "device_sn": "TESTCASE_CREATE_XXX", + "uid": 9001 + }, + "output": [ + "session_token" + ], + "base_url": "http://127.0.0.1:5000", + "name": "create user and check result." + }, + "teststeps": [ + { + "testcase": "testcases/setup.yml", + "extract": [ + "session_token" + ], + "name": "setup and reset all (override) for $device_sn." + }, + { + "testcase": "testcases/deps/check_and_create.yml", + "variables": { + "token": "$session_token" + }, + "name": "create user and check result." + } + ] +} \ No newline at end of file diff --git a/tests/testcases/create_user.v2.yml b/tests/testcases/create_user.v2.yml index 7f34c532..35541065 100644 --- a/tests/testcases/create_user.v2.yml +++ b/tests/testcases/create_user.v2.yml @@ -12,9 +12,8 @@ teststeps: - name: setup and reset all (override) for $device_sn. testcase: testcases/setup.yml - output: + extract: - session_token - - name: create user and check result. variables: diff --git a/tests/testcases/create_user.yml b/tests/testcases/create_user.yml index a09160cc..7b830f6c 100644 --- a/tests/testcases/create_user.yml +++ b/tests/testcases/create_user.yml @@ -12,7 +12,7 @@ - test: name: setup and reset all (override) for $device_sn. testcase: testcases/setup.yml - output: + extract: - session_token - test: