diff --git a/httprunner/loader.py b/httprunner/loader.py index eefca797..6e897d75 100644 --- a/httprunner/loader.py +++ b/httprunner/loader.py @@ -168,7 +168,7 @@ overall_def_dict = { testcases_cache_mapping = {} -def load_test_dependencies(): +def _load_test_dependencies(): """ load all api and suite definitions. default api folder is "$CWD/tests/api/". default suite folder is "$CWD/tests/suite/". @@ -177,12 +177,12 @@ def load_test_dependencies(): # load api definitions api_def_folder = os.path.join(os.getcwd(), "tests", "api") for test_file in load_folder_files(api_def_folder): - load_api_file(test_file) + _load_api_file(test_file) # load suite definitions suite_def_folder = os.path.join(os.getcwd(), "tests", "suite") for suite_file in load_folder_files(suite_def_folder): - suite = load_test_file(suite_file) + suite = _load_test_file(suite_file) if "def" not in suite["config"]: raise exceptions.ParamsError("def missed in suite file: {}!".format(suite_file)) @@ -192,7 +192,7 @@ def load_test_dependencies(): overall_def_dict["suite"][function_meta["func_name"]] = suite -def load_api_file(file_path): +def _load_api_file(file_path): """ load api definition from file and store in overall_def_dict["api"] api file should be in format below: [ @@ -235,7 +235,7 @@ def load_api_file(file_path): overall_def_dict["api"][func_name] = api_dict -def load_test_file(file_path): +def _load_test_file(file_path): """ load testcase file or testsuite file @param file_path: absolute valid file path file_path should be in format below: @@ -390,7 +390,7 @@ def load_testcases(path): elif os.path.isfile(path): try: - testcase = load_test_file(path) + testcase = _load_test_file(path) if testcase["testcases"]: testcases_list = [testcase] else: @@ -405,3 +405,12 @@ def load_testcases(path): testcases_cache_mapping[path] = testcases_list return testcases_list + + +def load(path): + """ main interface for loading testcases + @param (str) path: testcase file/folder path + @return (list) testcases list + """ + _load_test_dependencies() + return load_testcases(path) diff --git a/httprunner/locusts.py b/httprunner/locusts.py index d7ddedea..5b228a81 100644 --- a/httprunner/locusts.py +++ b/httprunner/locusts.py @@ -40,9 +40,8 @@ def gen_locustfile(testcase_file_path): "templates", "locustfile_template" ) - loader.load_test_dependencies() - testset = loader.load_test_file(testcase_file_path) - host = testset.get("config", {}).get("request", {}).get("base_url", "") + testcases = loader.load(testcase_file_path) + host = testcases[0].get("config", {}).get("request", {}).get("base_url", "") with io.open(template_path, encoding='utf-8') as template: with io.open(locustfile_path, 'w', encoding='utf-8') as locustfile: diff --git a/httprunner/task.py b/httprunner/task.py index c61bfb79..b1aab280 100644 --- a/httprunner/task.py +++ b/httprunner/task.py @@ -178,8 +178,7 @@ def init_test_suites(path_or_testsets, mapping=None, http_client_session=None): passed in variables mapping, it will override variables in config block """ if not testcase.is_testsets(path_or_testsets): - loader.load_test_dependencies() - testsets = loader.load_testcases(path_or_testsets) + testsets = loader.load(path_or_testsets) else: testsets = path_or_testsets diff --git a/tests/test_loader.py b/tests/test_loader.py index 57ae6bed..5013bd9c 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -151,13 +151,13 @@ class TestSuiteLoader(unittest.TestCase): } def test_load_test_dependencies(self): - loader.load_test_dependencies() + loader._load_test_dependencies() overall_def_dict = loader.overall_def_dict self.assertIn("get_token", overall_def_dict["api"]) self.assertIn("create_and_check", overall_def_dict["suite"]) def test_load_api_file(self): - loader.load_api_file("tests/api/basic.yml") + loader._load_api_file("tests/api/basic.yml") overall_api_def_dict = loader.overall_def_dict["api"] self.assertIn("get_token",overall_api_def_dict) self.assertEqual("/api/get-token", overall_api_def_dict["get_token"]["request"]["url"]) @@ -165,16 +165,16 @@ class TestSuiteLoader(unittest.TestCase): self.assertEqual(len(overall_api_def_dict["get_token"]["validate"]), 3) def test_load_test_file_suite(self): - loader.load_api_file("tests/api/basic.yml") - testset = loader.load_test_file("tests/suite/create_and_get.yml") + loader._load_api_file("tests/api/basic.yml") + testset = loader._load_test_file("tests/suite/create_and_get.yml") self.assertEqual(testset["config"]["name"], "create user and check result.") self.assertEqual(len(testset["testcases"]), 3) self.assertEqual(testset["testcases"][0]["name"], "make sure user $uid does not exist") self.assertEqual(testset["testcases"][0]["request"]["url"], "/api/users/$uid") def test_load_test_file_testcase(self): - loader.load_test_dependencies() - testset = loader.load_test_file("tests/testcases/smoketest.yml") + loader._load_test_dependencies() + testset = loader._load_test_file("tests/testcases/smoketest.yml") self.assertEqual(testset["config"]["name"], "smoketest") self.assertEqual(testset["config"]["path"], "tests/testcases/smoketest.yml") self.assertIn("device_sn", testset["config"]["variables"][0]) @@ -182,7 +182,7 @@ class TestSuiteLoader(unittest.TestCase): self.assertEqual(testset["testcases"][0]["name"], "get token") def test_get_block_by_name(self): - loader.load_test_dependencies() + loader._load_test_dependencies() ref_call = "get_user($uid, $token)" block = loader._get_block_by_name(ref_call, "api") self.assertEqual(block["request"]["url"], "/api/users/$uid") @@ -190,13 +190,13 @@ class TestSuiteLoader(unittest.TestCase): self.assertEqual(block["function_meta"]["args"], ['$uid', '$token']) def test_get_block_by_name_args_mismatch(self): - loader.load_test_dependencies() + loader._load_test_dependencies() ref_call = "get_user($uid, $token, $var)" with self.assertRaises(exceptions.ParamsError): loader._get_block_by_name(ref_call, "api") def test_override_block(self): - loader.load_test_dependencies() + loader._load_test_dependencies() def_block = loader._get_block_by_name("get_token($user_agent, $device_sn, $os_platform, $app_version)", "api") test_block = { "name": "override block", @@ -217,7 +217,7 @@ class TestSuiteLoader(unittest.TestCase): self.assertIn({'check': 'content.token', 'comparator': 'len_eq', 'expect': 32}, test_block["validate"]) def test_get_test_definition_api(self): - loader.load_test_dependencies() + loader._load_test_dependencies() api_def = loader._get_test_definition("get_headers", "api") self.assertEqual(api_def["request"]["url"], "/headers") self.assertEqual(len(api_def["setup_hooks"]), 2) @@ -227,7 +227,7 @@ class TestSuiteLoader(unittest.TestCase): loader._get_test_definition("get_token_XXX", "api") def test_get_test_definition_suite(self): - loader.load_test_dependencies() + loader._load_test_dependencies() api_def = loader._get_test_definition("create_and_check", "suite") self.assertEqual(api_def["config"]["name"], "create user and check result.") @@ -276,7 +276,7 @@ class TestSuiteLoader(unittest.TestCase): self.assertIn('method', test['request']) def test_load_testcases_by_path_folder(self): - loader.load_test_dependencies() + loader._load_test_dependencies() # absolute folder path path = os.path.join(os.getcwd(), 'tests/data') testset_list_1 = loader.load_testcases(path) @@ -315,7 +315,7 @@ class TestSuiteLoader(unittest.TestCase): loader.load_testcases(path) def test_load_testcases_by_path_layered(self): - loader.load_test_dependencies() + loader._load_test_dependencies() path = os.path.join( os.getcwd(), 'tests/data/demo_testset_layer.yml') testsets_list = loader.load_testcases(path) diff --git a/tests/test_task.py b/tests/test_task.py index 3620de85..db2112c4 100644 --- a/tests/test_task.py +++ b/tests/test_task.py @@ -16,7 +16,7 @@ class TestTask(ApiServerUnittest): def test_create_suite(self): testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo_testset_variables.yml') - testset = loader.load_test_file(testcase_file_path) + testset = loader._load_test_file(testcase_file_path) suite = task.TestSuite(testset) self.assertEqual(suite.countTestCases(), 3) for testcase in suite: