diff --git a/ate/utils.py b/ate/utils.py index 1add62d5..2dcd83c8 100644 --- a/ate/utils.py +++ b/ate/utils.py @@ -125,3 +125,47 @@ def diff_response(resp_obj, expected_resp_json): diff_content['body'] = body_diff return diff_content + +def load_foler_files(folder_path): + """ load folder path, return all files in list format. + """ + file_list = [] + + for dirpath, dirnames, filenames in os.walk(folder_path): + for filename in filenames: + file_path = os.path.join(dirpath, filename) + file_list.append(file_path) + + return file_list + +def load_testcases_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 all loaded testcases in a list + """ + testcases_list = [] + + if isinstance(path, (list, set)): + for file_path in set(path): + _testcases_list = load_testcases_by_path(file_path) + for testcase in _testcases_list: + testcases_list.append(testcase) + + return testcases_list + + if not os.path.isabs(path): + path = os.path.join(os.getcwd(), path) + + if os.path.isfile(path): + testcases = load_testcases(path) + testcases_list.extend(testcases) + + if os.path.isdir(path): + files = load_foler_files(path) + testcases_list.extend(load_testcases_by_path(files)) + + return testcases_list diff --git a/test/test_utils.py b/test/test_utils.py index 96020074..f2d5098a 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -241,3 +241,64 @@ class TestUtils(ApiServerUnittest): } } ) + + def test_load_foler_files(self): + folder = os.path.join(os.getcwd(), 'test') + files = utils.load_foler_files(folder) + file1 = os.path.join(os.getcwd(), 'test', 'test_utils.py') + file2 = os.path.join(os.getcwd(), 'test', 'data', 'demo_binds.yml') + self.assertIn(file1, files) + self.assertIn(file2, files) + + def test_load_testcases_by_path_files(self): + testcases_list = [] + + # absolute file path + path = os.path.join( + os.getcwd(), 'test/data/simple_demo_no_auth.json') + testcases_list.extend(utils.load_testcases_by_path(path)) + self.assertEqual(len(testcases_list), 2) + + # relative file path + path = 'test/data/simple_demo_no_auth.yml' + testcases_list.extend(utils.load_testcases_by_path(path)) + self.assertEqual(len(testcases_list), 4) + + # list/set container with file(s) + path = [ + os.path.join(os.getcwd(), 'test/data/simple_demo_no_auth.json'), + 'test/data/simple_demo_no_auth.yml' + ] + testcases_list.extend(utils.load_testcases_by_path(path)) + self.assertEqual(len(testcases_list), 8) + + for testcase in testcases_list: + testcase = testcase["test"] + self.assertIn('name', testcase) + self.assertIn('request', testcase) + self.assertIn('response', testcase) + self.assertIn('url', testcase['request']) + self.assertIn('method', testcase['request']) + + def test_load_testcases_by_path_folder(self): + testcases_list_1 = [] + testcases_list_2 = [] + testcases_list_3 = [] + + # absolute folder path + path = os.path.join(os.getcwd(), 'test/data') + testcases_list_1.extend(utils.load_testcases_by_path(path)) + self.assertGreater(len(testcases_list_1), 10) + + # relative folder path + path = 'test/data/' + testcases_list_2.extend(utils.load_testcases_by_path(path)) + self.assertEqual(len(testcases_list_1), len(testcases_list_2)) + + # list/set container with file(s) + path = [ + os.path.join(os.getcwd(), 'test/data'), + 'test/data/' + ] + testcases_list_3.extend(utils.load_testcases_by_path(path)) + self.assertEqual(len(testcases_list_3), 2 * len(testcases_list_1))