From 56ca99a6e878398b46a0d0673ad978750f3b3da7 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 18:07:11 +0800 Subject: [PATCH 1/6] remove unused unittest --- tests/data/test_bugfix.yml | 12 +----------- tests/test_runner.py | 15 +-------------- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/tests/data/test_bugfix.yml b/tests/data/test_bugfix.yml index 2297e119..5d3bd3d2 100644 --- a/tests/data/test_bugfix.yml +++ b/tests/data/test_bugfix.yml @@ -1,16 +1,6 @@ - config: name: "bugfix testcases." - request: - base_url: http://127.0.0.1:5000 - headers: - Content-Type: application/json - -- test: - name: get headers from config - request: - url: /api/users/1000 - method: GET - headers: + base_url: http://127.0.0.1:5000 - test: name: bugfix type_match #84 diff --git a/tests/test_runner.py b/tests/test_runner.py index 38d5f508..428735ce 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -238,25 +238,12 @@ class TestRunner(ApiServerUnittest): # check if teardown function executed self.assertGreater(end_time - start_time, 2) - def test_run_testcase_with_empty_header(self): - testcase_file_path = os.path.join( - os.getcwd(), 'tests/data/test_bugfix.yml') - tests_mapping = loader.load_tests(testcase_file_path) - testcase = tests_mapping["testcases"][0] - config_dict_headers = testcase["config"]["request"]["headers"] - test_dict_headers = testcase["teststeps"][0]["request"]["headers"] - headers = deep_update_dict( - config_dict_headers, - test_dict_headers - ) - self.assertEqual(headers["Content-Type"], "application/json") - def test_bugfix_type_match(self): testcase_file_path = os.path.join( os.getcwd(), 'tests/data/test_bugfix.yml') testcases = loader.load_file(testcase_file_path) - test = testcases[2]["test"] + test = testcases[1]["test"] self.test_runner.run_test(test) def test_run_validate_elapsed(self): From d0308bbf5152f09ac954eefe8361e3811f79679e Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 18:12:55 +0800 Subject: [PATCH 2/6] change test filename --- tests/data/{test_bugfix.yml => bugfix_type_match.yml} | 0 tests/test_runner.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/data/{test_bugfix.yml => bugfix_type_match.yml} (100%) diff --git a/tests/data/test_bugfix.yml b/tests/data/bugfix_type_match.yml similarity index 100% rename from tests/data/test_bugfix.yml rename to tests/data/bugfix_type_match.yml diff --git a/tests/test_runner.py b/tests/test_runner.py index 428735ce..936c879b 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -240,7 +240,7 @@ class TestRunner(ApiServerUnittest): def test_bugfix_type_match(self): testcase_file_path = os.path.join( - os.getcwd(), 'tests/data/test_bugfix.yml') + os.getcwd(), 'tests/data/bugfix_type_match.yml') testcases = loader.load_file(testcase_file_path) test = testcases[1]["test"] From 73dcded823d0889e80f6b1bc721a8df7d8070c1a Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 18:48:03 +0800 Subject: [PATCH 3/6] bugfix verify priority: teststep > config --- httprunner/parser.py | 11 +++++-- tests/test_parser.py | 71 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/httprunner/parser.py b/httprunner/parser.py index cd033299..94d7d822 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -794,9 +794,12 @@ def __parse_testcase_tests(tests, config, project_mapping): variables priority: testcase config > testcase test > testcase_def config > testcase_def test > api - base_url/verify priority: + base_url priority: testcase test > testcase config > testsuite test > testsuite config > api + verify priority: + testcase teststep (api) > testcase config > testsuite config + Args: tests (list): config (dict): @@ -814,8 +817,6 @@ def __parse_testcase_tests(tests, config, project_mapping): if (not test_dict.get("base_url")) and config_base_url: test_dict["base_url"] = config_base_url - test_dict.setdefault("verify", config_verify) - # 1, testcase config => testcase tests # override test_dict variables test_dict["variables"] = utils.extend_variables( @@ -875,6 +876,10 @@ def __parse_testcase_tests(tests, config, project_mapping): request_url ) + # verify priority: testcase teststep > testcase config + if "request" in test_dict and "verify" not in test_dict["request"]: + test_dict["request"]["verify"] = config_verify + def _parse_testcase(testcase, project_mapping): """ parse testcase diff --git a/tests/test_parser.py b/tests/test_parser.py index 153086fa..8f97ea30 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -732,6 +732,77 @@ class TestParser(unittest.TestCase): self.assertEqual(test_dict["request"]["url"], "https://debugtalk.com/api1") self.assertEqual(test_dict["request"]["verify"], True) + def test_parse_tests_verify_config_set(self): + """ verify priority: test_dict > config + """ + tests_mapping = { + 'testcases': [ + { + "config": { + 'name': 'bugfix verify', + "base_url": "https://httpbin.org/", + "verify": False + }, + "teststeps": [ + { + 'name': 'testcase1', + 'request': {'url': '/headers', 'method': 'GET'} + } + ] + } + ] + } + parsed_tests_mapping = parser.parse_tests(tests_mapping) + test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0] + self.assertEqual(test_dict["request"]["verify"], False) + + def test_parse_tests_verify_config_unset(self): + """ verify priority: test_dict > config + """ + tests_mapping = { + 'testcases': [ + { + "config": { + 'name': 'bugfix verify', + "base_url": "https://httpbin.org/", + }, + "teststeps": [ + { + 'name': 'testcase1', + 'request': {'url': '/headers', 'method': 'GET'} + } + ] + } + ] + } + parsed_tests_mapping = parser.parse_tests(tests_mapping) + test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0] + self.assertEqual(test_dict["request"]["verify"], True) + + def test_parse_tests_verify_step_set_false(self): + """ verify priority: test_dict > config + """ + tests_mapping = { + 'testcases': [ + { + "config": { + 'name': 'bugfix verify', + "base_url": "https://httpbin.org/", + "verify": True + }, + "teststeps": [ + { + 'name': 'testcase1', + 'request': {'url': '/headers', 'method': 'GET', "verify": False} + } + ] + } + ] + } + parsed_tests_mapping = parser.parse_tests(tests_mapping) + test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0] + self.assertEqual(test_dict["request"]["verify"], False) + def test_parse_environ(self): os.environ["PROJECT_KEY"] = "ABCDEFGH" content = { From c2247fdbff66b012690de9073d2a58bdd1ed70df Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 19:38:32 +0800 Subject: [PATCH 4/6] fix testcase: add base_url --- tests/testcases/create_and_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/testcases/create_and_check.yml b/tests/testcases/create_and_check.yml index 2126e778..0afd37c7 100644 --- a/tests/testcases/create_and_check.yml +++ b/tests/testcases/create_and_check.yml @@ -2,6 +2,7 @@ - config: name: "create user and check result." id: create_and_check + base_url: "http://127.0.0.1:5000" variables: uid: 9001 device_sn: "TESTCASE_CREATE_XXX" From 010109d5b96045cbe87450eed2d6db0696fa296f Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 20:04:07 +0800 Subject: [PATCH 5/6] add unittest for verify --- tests/test_api.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index ba2b0ad0..4915dcd1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -491,6 +491,10 @@ class TestApi(ApiServerUnittest): self.assertNotIn("api_def", test_dict1) self.assertEqual(test_dict1["variables"]["device_sn"], "TESTCASE_SETUP_XXX") self.assertEqual(test_dict1["request"]["url"], "http://127.0.0.1:5000/api/get-token") + self.assertEqual(test_dict1["request"]["verify"], False) + + test_dict2 = parsed_testcases[0]["teststeps"][1] + self.assertEqual(test_dict2["request"]["verify"], False) def test_testcase_add_tests(self): testcase_path = "tests/testcases/setup.yml" @@ -506,6 +510,22 @@ class TestApi(ApiServerUnittest): self.assertEqual(teststeps[0]["variables"]["device_sn"], "TESTCASE_SETUP_XXX") self.assertIn("api", teststeps[0]) + def test_testcase_complex_verify(self): + testcase_path = "tests/testcases/create_and_check.yml" + tests_mapping = loader.load_tests(testcase_path) + parsed_tests_mapping = parser.parse_tests(tests_mapping) + teststeps = parsed_tests_mapping["testcases"][0]["teststeps"] + + # testcases/setup.yml + teststep1 = teststeps[0] + self.assertEqual(teststep1["teststeps"][0]["request"]["verify"], False) + self.assertEqual(teststep1["teststeps"][1]["request"]["verify"], False) + + # testcases/create_and_check.yml teststep 2/3/4 + self.assertEqual(teststeps[1]["request"]["verify"], True) + self.assertEqual(teststeps[2]["request"]["verify"], True) + self.assertEqual(teststeps[3]["request"]["verify"], True) + def test_testcase_simple_run_suite(self): testcase_path = "tests/testcases/setup.yml" tests_mapping = loader.load_tests(testcase_path) From e84a3a62033d2c66f09337db189610186d619f50 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 24 Feb 2019 20:05:08 +0800 Subject: [PATCH 6/6] bump to 2.0.3 --- httprunner/__about__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httprunner/__about__.py b/httprunner/__about__.py index 4193ecce..8164a250 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.0.2' +__version__ = '2.0.3' __author__ = 'debugtalk' __author_email__ = 'mail@debugtalk.com' __license__ = 'Apache-2.0'