Exemple #1
0
    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)
Exemple #3
0
    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