mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-17 14:57:35 +08:00
refactor loader: load testcases
This commit is contained in:
@@ -219,60 +219,34 @@ class TestModuleLoader(unittest.TestCase):
|
||||
|
||||
class TestSuiteLoader(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
loader.overall_def_dict = {
|
||||
"api": {},
|
||||
"suite": {}
|
||||
}
|
||||
|
||||
def test_load_test_dependencies(self):
|
||||
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")
|
||||
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"])
|
||||
self.assertIn("$user_agent", overall_api_def_dict["get_token"]["function_meta"]["args"])
|
||||
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")
|
||||
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")
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
project_dir = os.path.join(os.getcwd(), "tests")
|
||||
loader.load_project_tests(project_dir)
|
||||
|
||||
def test_load_test_file_testcase(self):
|
||||
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])
|
||||
self.assertEqual(len(testset["testcases"]), 8)
|
||||
self.assertEqual(testset["testcases"][0]["name"], "get token")
|
||||
testcase = loader._load_test_file("tests/testcases/smoketest.yml")
|
||||
self.assertEqual(testcase["config"]["name"], "smoketest")
|
||||
self.assertEqual(testcase["config"]["path"], "tests/testcases/smoketest.yml")
|
||||
self.assertIn("device_sn", testcase["config"]["variables"][0])
|
||||
self.assertEqual(len(testcase["teststeps"]), 8)
|
||||
self.assertEqual(testcase["teststeps"][0]["name"], "get token")
|
||||
|
||||
def test_get_block_by_name(self):
|
||||
loader._load_test_dependencies()
|
||||
ref_call = "get_user($uid, $token)"
|
||||
block = loader._get_block_by_name(ref_call, "api")
|
||||
block = loader._get_block_by_name(ref_call, "def-api")
|
||||
self.assertEqual(block["request"]["url"], "/api/users/$uid")
|
||||
self.assertEqual(block["function_meta"]["func_name"], "get_user")
|
||||
self.assertEqual(block["function_meta"]["args"], ['$uid', '$token'])
|
||||
|
||||
def test_get_block_by_name_args_mismatch(self):
|
||||
loader._load_test_dependencies()
|
||||
ref_call = "get_user($uid, $token, $var)"
|
||||
with self.assertRaises(exceptions.ParamsError):
|
||||
loader._get_block_by_name(ref_call, "api")
|
||||
loader._get_block_by_name(ref_call, "def-api")
|
||||
|
||||
def test_override_block(self):
|
||||
loader._load_test_dependencies()
|
||||
def_block = loader._get_block_by_name("get_token($user_agent, $device_sn, $os_platform, $app_version)", "api")
|
||||
def_block = loader._get_block_by_name(
|
||||
"get_token($user_agent, $device_sn, $os_platform, $app_version)", "def-api")
|
||||
test_block = {
|
||||
"name": "override block",
|
||||
"variables": [
|
||||
@@ -286,28 +260,26 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
]
|
||||
}
|
||||
|
||||
loader._override_block(def_block, test_block)
|
||||
loader._extend_block(test_block, def_block)
|
||||
self.assertEqual(test_block["name"], "override block")
|
||||
self.assertIn({'check': 'status_code', 'expect': 201, 'comparator': 'eq'}, test_block["validate"])
|
||||
self.assertIn({'check': 'content.token', 'comparator': 'len_eq', 'expect': 32}, test_block["validate"])
|
||||
|
||||
def test_get_test_definition_api(self):
|
||||
loader._load_test_dependencies()
|
||||
api_def = loader._get_test_definition("get_headers", "api")
|
||||
api_def = loader._get_test_definition("get_headers", "def-api")
|
||||
self.assertEqual(api_def["request"]["url"], "/headers")
|
||||
self.assertEqual(len(api_def["setup_hooks"]), 2)
|
||||
self.assertEqual(len(api_def["teardown_hooks"]), 1)
|
||||
|
||||
with self.assertRaises(exceptions.ApiNotFound):
|
||||
loader._get_test_definition("get_token_XXX", "api")
|
||||
loader._get_test_definition("get_token_XXX", "def-api")
|
||||
|
||||
def test_get_test_definition_suite(self):
|
||||
loader._load_test_dependencies()
|
||||
api_def = loader._get_test_definition("create_and_check", "suite")
|
||||
api_def = loader._get_test_definition("create_and_check", "def-testcase")
|
||||
self.assertEqual(api_def["config"]["name"], "create user and check result.")
|
||||
|
||||
with self.assertRaises(exceptions.TestcaseNotFound):
|
||||
loader._get_test_definition("create_and_check_XXX", "suite")
|
||||
loader._get_test_definition("create_and_check_XXX", "def-testcase")
|
||||
|
||||
def test_merge_validator(self):
|
||||
def_validators = [
|
||||
@@ -376,7 +348,7 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
self.assertEqual(len(testset_list), 1)
|
||||
self.assertIn("path", testset_list[0]["config"])
|
||||
self.assertEqual(testset_list[0]["config"]["path"], path)
|
||||
self.assertEqual(len(testset_list[0]["testcases"]), 3)
|
||||
self.assertEqual(len(testset_list[0]["teststeps"]), 3)
|
||||
testsets_list.extend(testset_list)
|
||||
|
||||
# relative file path
|
||||
@@ -385,7 +357,7 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
self.assertEqual(len(testset_list), 1)
|
||||
self.assertIn("path", testset_list[0]["config"])
|
||||
self.assertIn(path, testset_list[0]["config"]["path"])
|
||||
self.assertEqual(len(testset_list[0]["testcases"]), 3)
|
||||
self.assertEqual(len(testset_list[0]["teststeps"]), 3)
|
||||
testsets_list.extend(testset_list)
|
||||
|
||||
# list/set container with file(s)
|
||||
@@ -395,20 +367,19 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
]
|
||||
testset_list = loader.load_testcases(path)
|
||||
self.assertEqual(len(testset_list), 2)
|
||||
self.assertEqual(len(testset_list[0]["testcases"]), 3)
|
||||
self.assertEqual(len(testset_list[1]["testcases"]), 3)
|
||||
self.assertEqual(len(testset_list[0]["teststeps"]), 3)
|
||||
self.assertEqual(len(testset_list[1]["teststeps"]), 3)
|
||||
testsets_list.extend(testset_list)
|
||||
self.assertEqual(len(testsets_list), 4)
|
||||
|
||||
for testset in testsets_list:
|
||||
for test in testset["testcases"]:
|
||||
for test in testset["teststeps"]:
|
||||
self.assertIn('name', test)
|
||||
self.assertIn('request', test)
|
||||
self.assertIn('url', test['request'])
|
||||
self.assertIn('method', test['request'])
|
||||
|
||||
def test_load_testcases_by_path_folder(self):
|
||||
loader._load_test_dependencies()
|
||||
# absolute folder path
|
||||
path = os.path.join(os.getcwd(), 'tests/data')
|
||||
testset_list_1 = loader.load_testcases(path)
|
||||
@@ -447,15 +418,14 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
loader.load_testcases(path)
|
||||
|
||||
def test_load_testcases_by_path_layered(self):
|
||||
loader._load_test_dependencies()
|
||||
path = os.path.join(
|
||||
os.getcwd(), 'tests/data/demo_testset_layer.yml')
|
||||
testsets_list = loader.load_testcases(path)
|
||||
self.assertIn("variables", testsets_list[0]["config"])
|
||||
self.assertIn("request", testsets_list[0]["config"])
|
||||
self.assertIn("request", testsets_list[0]["testcases"][0])
|
||||
self.assertIn("url", testsets_list[0]["testcases"][0]["request"])
|
||||
self.assertIn("validate", testsets_list[0]["testcases"][0])
|
||||
self.assertIn("request", testsets_list[0]["teststeps"][0])
|
||||
self.assertIn("url", testsets_list[0]["teststeps"][0]["request"])
|
||||
self.assertIn("validate", testsets_list[0]["teststeps"][0])
|
||||
|
||||
def test_load_folder_content(self):
|
||||
path = os.path.join(os.getcwd(), "tests", "api")
|
||||
@@ -481,6 +451,10 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
testcases_definition_mapping["setup_and_reset"]["config"]["name"],
|
||||
"setup and reset all."
|
||||
)
|
||||
self.assertEqual(
|
||||
testcases_definition_mapping["setup_and_reset"]["function_meta"]["func_name"],
|
||||
"setup_and_reset"
|
||||
)
|
||||
|
||||
def test_load_testsuites_folder(self):
|
||||
path = os.path.join(os.getcwd(), "tests", "testcases")
|
||||
@@ -500,18 +474,18 @@ class TestSuiteLoader(unittest.TestCase):
|
||||
project_dir = os.path.join(os.getcwd(), "tests")
|
||||
project_tests = loader.load_project_tests(project_dir)
|
||||
self.assertEqual(project_tests["debugtalk"]["variables"]["SECRET_KEY"], "DebugTalk")
|
||||
self.assertIn("get_token", project_tests["tests"]["api"])
|
||||
self.assertIn("setup_and_reset", project_tests["tests"]["testcases"])
|
||||
self.assertIn("get_token", project_tests["def-api"])
|
||||
self.assertIn("setup_and_reset", project_tests["def-testcase"])
|
||||
|
||||
def test_loader(self):
|
||||
hrunner = task.HttpRunner(dot_env_path="tests/data/test.env")
|
||||
self.assertEqual(hrunner.project_mapping["env"]["PROJECT_KEY"], "ABCDEFGH")
|
||||
self.assertIn("debugtalk", hrunner.project_mapping)
|
||||
self.assertIn("setup_and_reset", hrunner.project_mapping["tests"]["testcases"])
|
||||
self.assertIn("setup_and_reset", hrunner.project_mapping["def-testcase"])
|
||||
self.assertEqual(
|
||||
hrunner.project_mapping["debugtalk"]["variables"]["SECRET_KEY"],
|
||||
"DebugTalk"
|
||||
)
|
||||
self.assertIn("get_sign", hrunner.project_mapping["debugtalk"]["functions"])
|
||||
self.assertIn("get_token", hrunner.project_mapping["tests"]["api"])
|
||||
self.assertIn("setup_and_reset", hrunner.project_mapping["tests"]["testcases"])
|
||||
self.assertIn("get_token", hrunner.project_mapping["def-api"])
|
||||
self.assertIn("setup_and_reset", hrunner.project_mapping["def-testcase"])
|
||||
|
||||
Reference in New Issue
Block a user