def load_testsets_by_path(path): """ load testcases from file path @param path: path could be in several type - absolute/relative file path - absolute/relative folder path - list/set container with file(s) and/or folder(s) @return testcase sets list, each testset is corresponding to a file [ testset_dict_1, testset_dict_2 ] """ if isinstance(path, (list, set)): testsets = [] for file_path in set(path): testset = TestcaseLoader.load_testsets_by_path(file_path) if not testset: continue testsets.extend(testset) return testsets if not os.path.isabs(path): path = os.path.join(os.getcwd(), path) if path in TestcaseLoader.testcases_cache_mapping: return TestcaseLoader.testcases_cache_mapping[path] if os.path.isdir(path): files_list = FileUtils.load_folder_files(path) testcases_list = TestcaseLoader.load_testsets_by_path(files_list) elif os.path.isfile(path): try: testset = TestcaseLoader.load_test_file(path) '''修改源码:增加key是否存在判断''' if testset["testcases"] or ('api' in testset.keys() and testset["api"]): testcases_list = [testset] else: testcases_list = [] raise Exception( '用例执行错误,请检查', '用例名称:' + testset.get('config', {}).get('name')) except exceptions.FileFormatError: testcases_list = [] # except Exception: # testcases_list = [] else: logger.log_error(u"file not found: {}".format(path)) testcases_list = [] TestcaseLoader.testcases_cache_mapping[path] = testcases_list return testcases_list
def test_load_folder_files(self): folder = os.path.join(os.getcwd(), 'tests') file1 = os.path.join(os.getcwd(), 'tests', 'test_utils.py') file2 = os.path.join(os.getcwd(), 'tests', 'data', 'demo_binds.yml') files = FileUtils.load_folder_files(folder, recursive=False) self.assertNotIn(file2, files) files = FileUtils.load_folder_files(folder) self.assertIn(file2, files) self.assertNotIn(file1, files) files = FileUtils.load_folder_files(folder) api_file = os.path.join(os.getcwd(), 'tests', 'api', 'basic.yml') self.assertIn(api_file, files) files = FileUtils.load_folder_files("not_existed_foulder", recursive=False) self.assertEqual([], files) files = FileUtils.load_folder_files(file2, recursive=False) self.assertEqual([], files)
def load_test_dependencies(): """ load all api and suite definitions. default api folder is "$CWD/tests/api/". default suite folder is "$CWD/tests/suite/". """ # TODO: cache api and suite loading # load api definitions api_def_folder = os.path.join(os.getcwd(), "tests", "api") for test_file in FileUtils.load_folder_files(api_def_folder): TestcaseLoader.load_api_file(test_file) # load suite definitions suite_def_folder = os.path.join(os.getcwd(), "tests", "suite") for suite_file in FileUtils.load_folder_files(suite_def_folder): suite = TestcaseLoader.load_test_file(suite_file) if "def" not in suite["config"]: raise exception.ParamsError("def missed in suite file: {}!".format(suite_file)) call_func = suite["config"]["def"] function_meta = parse_function(call_func) suite["function_meta"] = function_meta TestcaseLoader.overall_def_dict["suite"][function_meta["func_name"]] = suite