From f87aaf56624562bec94c434c718d73b9aac6a297 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 31 May 2020 12:05:04 +0800 Subject: [PATCH] fix: referenced testcase should not be run duplicately --- httprunner/make.py | 15 ++++++++++----- tests/make_test.py | 8 ++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/httprunner/make.py b/httprunner/make.py index 749131dc..0d19aacd 100644 --- a/httprunner/make.py +++ b/httprunner/make.py @@ -132,7 +132,9 @@ def __format_pytest_with_black(python_paths: List[Text]) -> NoReturn: logger.error(ex) -def __make_testcase(testcase: Dict, dir_path: Text = None) -> NoReturn: +def __make_testcase( + testcase: Dict, dir_path: Text = None, ref_flag: bool = False +) -> NoReturn: """convert valid testcase dict to pytest file path""" # ensure compatibility with testcase format v2 testcase = ensure_testcase_v3(testcase) @@ -174,7 +176,7 @@ def __make_testcase(testcase: Dict, dir_path: Text = None) -> NoReturn: # make ref testcase pytest file ref_testcase_path = __ensure_absolute(teststep["testcase"]) - __make(ref_testcase_path) + __make(ref_testcase_path, ref_flag=True) # prepare ref testcase class name ref_testcase_python_path, ref_testcase_cls_name = convert_testcase_path( @@ -206,7 +208,9 @@ def __make_testcase(testcase: Dict, dir_path: Text = None) -> NoReturn: __ensure_testcase_module(testcase_python_path) logger.info(f"generated testcase: {testcase_python_path}") - make_files_cache_set.add(__ensure_cwd_relative(testcase_python_path)) + + if not ref_flag: + make_files_cache_set.add(__ensure_cwd_relative(testcase_python_path)) def __make_testsuite(testsuite: Dict) -> NoReturn: @@ -257,12 +261,13 @@ def __make_testsuite(testsuite: Dict) -> NoReturn: __make_testcase(testcase_dict, testsuite_dir) -def __make(tests_path: Text) -> NoReturn: +def __make(tests_path: Text, ref_flag: bool = False) -> NoReturn: """ make testcase(s) with testcase/testsuite/folder absolute path generated pytest file path will be cached in make_files_cache_set Args: tests_path: should be in absolute path + ref_flag: flag if referenced test path """ test_files = [] @@ -290,7 +295,7 @@ def __make(tests_path: Text) -> NoReturn: # testcase if "teststeps" in test_content: try: - __make_testcase(test_content) + __make_testcase(test_content, ref_flag=ref_flag) except exceptions.TestCaseFormatError: continue diff --git a/tests/make_test.py b/tests/make_test.py index cabb27ed..7884910e 100644 --- a/tests/make_test.py +++ b/tests/make_test.py @@ -18,7 +18,7 @@ class TestLoader(unittest.TestCase): ] make_files_cache_set.clear() testcase_python_list = main_make(path) - self.assertEqual(len(testcase_python_list), 2) + self.assertEqual(len(testcase_python_list), 1) self.assertIn( "examples/postman_echo/request_methods/request_with_testcase_reference_test.py", testcase_python_list, @@ -86,7 +86,7 @@ from examples.postman_echo.request_methods.request_with_functions_test import ( path = ["examples/postman_echo/request_methods/demo_testsuite.yml"] make_files_cache_set.clear() testcase_python_list = main_make(path) - self.assertEqual(len(testcase_python_list), 3) + self.assertEqual(len(testcase_python_list), 2) self.assertIn( "examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py", testcase_python_list, @@ -95,7 +95,3 @@ from examples.postman_echo.request_methods.request_with_functions_test import ( "examples/postman_echo/request_methods/demo_testsuite_yml/request_with_testcase_reference_test.py", testcase_python_list, ) - self.assertIn( - "examples/postman_echo/request_methods/request_with_functions_test.py", - testcase_python_list, - )