diff --git a/httprunner/ext/make/__init__.py b/httprunner/ext/make/__init__.py index 44b9f370..c0f045ff 100644 --- a/httprunner/ext/make/__init__.py +++ b/httprunner/ext/make/__init__.py @@ -15,6 +15,10 @@ from httprunner.loader import ( ) from httprunner.parser import parse_data +""" cache converted pytest files, avoid duplicate making +""" +make_files_cache_mapping: Dict[Text, List] = {} + __TMPL__ = """# NOTICE: Generated By HttpRunner. DO'NOT EDIT! # FROM: {{ testcase_path }} from httprunner import HttpRunner, TConfig, TStep @@ -203,6 +207,10 @@ def make_testsuite(testsuite: Dict) -> List[Text]: def __make(tests_path: Text) -> List: + global make_files_cache_mapping + if tests_path in make_files_cache_mapping: + return make_files_cache_mapping[tests_path] + test_files = [] if os.path.isdir(tests_path): files_list = load_folder_files(tests_path) @@ -245,6 +253,8 @@ def __make(tests_path: Text) -> List: f"test file is neither testcase nor testsuite: {test_file}" ) + make_files_cache_mapping[tests_path] = testcase_path_list + if not testcase_path_list: logger.warning(f"No valid testcase generated on {tests_path}") return [] @@ -253,9 +263,13 @@ def __make(tests_path: Text) -> List: def main_make(tests_paths: List[Text]) -> List: - testcase_path_list = [] + for tests_path in tests_paths: - testcase_path_list.extend(__make(tests_path)) + __make(tests_path) + + testcase_path_list = [] + for tests_path, pytest_files in make_files_cache_mapping.items(): + testcase_path_list.extend(pytest_files) format_pytest_with_black(testcase_path_list) return testcase_path_list