fix base_url with api referrence

This commit is contained in:
debugtalk
2018-11-29 15:15:45 +08:00
parent 288efbbd18
commit 8b74e7cc57
2 changed files with 26 additions and 37 deletions

View File

@@ -614,22 +614,13 @@ def _extend_with_api(test_dict, api_def_dict):
# TODO: merge & override request # TODO: merge & override request
test_dict["request"] = api_def_dict.pop("request", {}) test_dict["request"] = api_def_dict.pop("request", {})
# base_url
if "base_url" in test_dict:
base_url = test_dict.pop("base_url")
test_dict["request"]["url"] = utils.build_url(
base_url,
test_dict["request"]["url"]
)
# verify # base_url & verify: priority api_def_dict > test_dict
if "verify" in test_dict: if "base_url" in api_def_dict:
verify = test_dict.pop("verify") test_dict["base_url"] = api_def_dict["base_url"]
elif "verify" in api_def_dict:
verify = api_def_dict.pop("verify") if "verify" in api_def_dict:
else: test_dict["request"]["verify"] = api_def_dict["verify"]
verify = True
test_dict["request"]["verify"] = verify
# merge & override setup_hooks # merge & override setup_hooks
def_setup_hooks = api_def_dict.pop("setup_hooks", []) def_setup_hooks = api_def_dict.pop("setup_hooks", [])
@@ -786,10 +777,6 @@ def __parse_tests(tests, config, project_mapping):
_parse_testcase(test_dict, project_mapping) _parse_testcase(test_dict, project_mapping)
else: else:
# test_dict is API test, has two cases.
# (1) test_dict has API reference
# (2) test_dict is defined directly
# 1, config => tests # 1, config => tests
# override test_dict variables # override test_dict variables
test_dict["variables"] = utils.extend_variables( test_dict["variables"] = utils.extend_variables(
@@ -808,27 +795,26 @@ def __parse_tests(tests, config, project_mapping):
pass pass
if "api_def" in test_dict: if "api_def" in test_dict:
# case (1) # test_dict has API reference
# 2, test_dict => api # 2, test_dict => api
api_def_dict = test_dict.pop("api_def") api_def_dict = test_dict.pop("api_def")
_extend_with_api(test_dict, api_def_dict) _extend_with_api(test_dict, api_def_dict)
else:
# case (2) if "base_url" in test_dict:
if "base_url" in test_dict: base_url = parse_data(
base_url = parse_data( test_dict.pop("base_url"),
test_dict.pop("base_url"), test_dict["variables"],
test_dict["variables"], functions
functions )
) request_url = parse_data(
request_url = parse_data( test_dict["request"]["url"],
test_dict["request"]["url"], test_dict["variables"],
test_dict["variables"], functions
functions )
) test_dict["request"]["url"] = utils.build_url(
test_dict["request"]["url"] = utils.build_url( base_url,
base_url, request_url
request_url )
)
def _parse_testcase(testcase, project_mapping): def _parse_testcase(testcase, project_mapping):

View File

@@ -598,6 +598,7 @@ class TestParser(unittest.TestCase):
loader.load_project_tests(os.path.join(os.getcwd(), "tests")) loader.load_project_tests(os.path.join(os.getcwd(), "tests"))
raw_testinfo = { raw_testinfo = {
"name": "get token", "name": "get token",
"base_url": "https://debugtalk.com",
"api": "get_token", "api": "get_token",
} }
api_def_dict = loader.load_test(raw_testinfo) api_def_dict = loader.load_test(raw_testinfo)
@@ -607,6 +608,7 @@ class TestParser(unittest.TestCase):
"variables": [ "variables": [
{"var": 123} {"var": 123}
], ],
"base_url": "https://httprunner.org",
'request': { 'request': {
'url': '/api/get-token', 'url': '/api/get-token',
'method': 'POST', 'method': 'POST',
@@ -620,6 +622,7 @@ class TestParser(unittest.TestCase):
} }
extended_block = parser._extend_with_api(test_block, api_def_dict) extended_block = parser._extend_with_api(test_block, api_def_dict)
self.assertEqual(extended_block["base_url"], "https://debugtalk.com")
self.assertEqual(extended_block["name"], "override block") self.assertEqual(extended_block["name"], "override block")
self.assertIn({'var': 123}, extended_block["variables"]) self.assertIn({'var': 123}, extended_block["variables"])
self.assertIn({'check': 'status_code', 'expect': 201, 'comparator': 'eq'}, extended_block["validate"]) self.assertIn({'check': 'status_code', 'expect': 201, 'comparator': 'eq'}, extended_block["validate"])