From 6a68207aa9017abf7c284d9b49ba8fc39886931f Mon Sep 17 00:00:00 2001 From: debugtalk Date: Mon, 24 Dec 2018 12:24:30 +0800 Subject: [PATCH] fix: run api folder, each api should be encapsulated as individual testcase --- httprunner/loader.py | 2 +- httprunner/parser.py | 13 +++++++------ httprunner/report.py | 2 +- tests/test_api.py | 11 +++++++++++ tests/test_loader.py | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/httprunner/loader.py b/httprunner/loader.py index f3a5238d..3a34865f 100644 --- a/httprunner/loader.py +++ b/httprunner/loader.py @@ -770,7 +770,7 @@ def load_tests(path, dot_env_path=None): elif loaded_content["type"] == "testcase": tests_mapping.setdefault("testcases", []).append(loaded_content) elif loaded_content["type"] == "api": - tests_mapping.setdefault("api", []).append(loaded_content) + tests_mapping.setdefault("apis", []).append(loaded_content) if os.path.isdir(path): files_list = load_folder_files(path) diff --git a/httprunner/parser.py b/httprunner/parser.py index cb63600c..27c80ee7 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -1101,12 +1101,13 @@ def parse_tests(tests_mapping): _parse_testcase(testcase, project_mapping) parsed_tests_mapping["testcases"].append(testcase) - elif test_type == "api": + elif test_type == "apis": # encapsulate api as a testcase - testcase = { - "teststeps": tests_mapping["api"] - } - _parse_testcase(testcase, project_mapping) - parsed_tests_mapping["testcases"].append(testcase) + for api_content in tests_mapping["apis"]: + testcase = { + "teststeps": [api_content] + } + _parse_testcase(testcase, project_mapping) + parsed_tests_mapping["testcases"].append(testcase) return parsed_tests_mapping diff --git a/httprunner/report.py b/httprunner/report.py index bf448e5a..23feb524 100644 --- a/httprunner/report.py +++ b/httprunner/report.py @@ -85,7 +85,7 @@ def stringify_summary(summary): for index, suite_summary in enumerate(summary["details"]): if not suite_summary.get("name"): - suite_summary["name"] = "test suite {}".format(index) + suite_summary["name"] = "testcase {}".format(index) for record in suite_summary.get("records"): meta_datas = record['meta_datas'] diff --git a/tests/test_api.py b/tests/test_api.py index 4d649ce0..6f2790d8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -317,6 +317,17 @@ class TestHttpRunner(ApiServerUnittest): req_resp_data[0]["request"]["url"] ) + def test_run_api_folder(self): + api_folder = "tests/httpbin/api/" + self.runner.run(api_folder) + summary = self.runner.summary + self.assertTrue(summary["success"]) + self.assertEqual(summary["stat"]["testsRun"], 2) + self.assertEqual(summary["stat"]["successes"], 2) + self.assertEqual(len(summary["details"]), 2) + self.assertEqual(summary["details"][0]["stat"]["testsRun"], 1) + self.assertEqual(summary["details"][1]["stat"]["testsRun"], 1) + def test_run_testcase_hardcode(self): for testcase_file_path in self.testcase_file_path_list: self.runner.run(testcase_file_path) diff --git a/tests/test_loader.py b/tests/test_loader.py index 12feaa96..4a659e07 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -322,7 +322,7 @@ class TestSuiteLoader(unittest.TestCase): os.getcwd(), 'tests/api/create_user.yml') tests_mapping = loader.load_tests(path) project_mapping = tests_mapping["project_mapping"] - api_list = tests_mapping["api"] + api_list = tests_mapping["apis"] self.assertEqual(len(api_list), 1) self.assertEqual(api_list[0]["request"]["url"], "/api/users/$uid")