Merge pull request #375 from HttpRunner/bugfix

fix #373: do not lower request headers
This commit is contained in:
debugtalk
2018-09-04 17:28:30 +08:00
committed by GitHub
4 changed files with 51 additions and 34 deletions

View File

@@ -27,7 +27,7 @@ class Runner(object):
self.testcase_teardown_hooks = config_dict.pop("teardown_hooks", []) self.testcase_teardown_hooks = config_dict.pop("teardown_hooks", [])
self.context = Context(config_variables, config_functions) self.context = Context(config_variables, config_functions)
self.init_config(config_dict, "testcase") self.init_test(config_dict, "testcase")
if testcase_setup_hooks: if testcase_setup_hooks:
self.do_hook_actions(testcase_setup_hooks) self.do_hook_actions(testcase_setup_hooks)
@@ -36,11 +36,11 @@ class Runner(object):
if self.testcase_teardown_hooks: if self.testcase_teardown_hooks:
self.do_hook_actions(self.testcase_teardown_hooks) self.do_hook_actions(self.testcase_teardown_hooks)
def init_config(self, config_dict, level): def init_test(self, test_dict, level):
""" create/update context variables binds """ create/update context variables binds
Args: Args:
config_dict (dict): test_dict (dict):
level (enum): "testcase" or "teststep" level (enum): "testcase" or "teststep"
testcase: testcase:
{ {
@@ -73,15 +73,14 @@ class Runner(object):
dict: parsed request dict dict: parsed request dict
""" """
# convert keys in request headers to lowercase test_dict = utils.lower_test_dict_keys(test_dict)
config_dict = utils.lower_config_dict_key(config_dict)
self.context.init_context_variables(level) self.context.init_context_variables(level)
variables = config_dict.get('variables') \ variables = test_dict.get('variables') \
or config_dict.get('variable_binds', OrderedDict()) or test_dict.get('variable_binds', OrderedDict())
self.context.update_context_variables(variables, level) self.context.update_context_variables(variables, level)
request_config = config_dict.get('request', {}) request_config = test_dict.get('request', {})
parsed_request = self.context.get_parsed_request(request_config, level) parsed_request = self.context.get_parsed_request(request_config, level)
base_url = parsed_request.pop("base_url", None) base_url = parsed_request.pop("base_url", None)
@@ -165,7 +164,7 @@ class Runner(object):
# prepare # prepare
extractors = teststep_dict.get("extract", []) or teststep_dict.get("extractors", []) extractors = teststep_dict.get("extract", []) or teststep_dict.get("extractors", [])
validators = teststep_dict.get("validate", []) or teststep_dict.get("validators", []) validators = teststep_dict.get("validate", []) or teststep_dict.get("validators", [])
parsed_request = self.init_config(teststep_dict, level="teststep") parsed_request = self.init_test(teststep_dict, level="teststep")
self.context.update_teststep_variables_mapping("request", parsed_request) self.context.update_teststep_variables_mapping("request", parsed_request)
# setup hooks # setup hooks

View File

@@ -127,9 +127,32 @@ def deep_update_dict(origin_dict, override_dict):
def lower_dict_keys(origin_dict): def lower_dict_keys(origin_dict):
""" convert keys in dict to lower case """ convert keys in dict to lower case
e.g.
Name => name, Request => request Args:
URL => url, METHOD => method, Headers => headers, Data => data origin_dict (dict): mapping data structure
Returns:
dict: mapping with all keys lowered.
Examples:
>>> origin_dict = {
"Name": "",
"Request": "",
"URL": "",
"METHOD": "",
"Headers": "",
"Data": ""
}
>>> lower_dict_keys(origin_dict)
{
"name": "",
"request": "",
"url": "",
"method": "",
"headers": "",
"data": ""
}
""" """
if not origin_dict or not isinstance(origin_dict, dict): if not origin_dict or not isinstance(origin_dict, dict):
return origin_dict return origin_dict
@@ -139,24 +162,19 @@ def lower_dict_keys(origin_dict):
for key, value in origin_dict.items() for key, value in origin_dict.items()
} }
def lower_config_dict_key(config_dict): def lower_test_dict_keys(test_dict):
""" convert key in config dict to lower case, convertion will occur in three places: """ convert keys in test_dict to lower case, convertion will occur in two places:
1, all keys in config dict; 1, all keys in test_dict;
2, all keys in config["request"] 2, all keys in test_dict["request"]
3, all keys in config["request"]["headers"]
""" """
# convert keys in config dict # convert keys in test_dict
config_dict = lower_dict_keys(config_dict) test_dict = lower_dict_keys(test_dict)
if "request" in config_dict: if "request" in test_dict:
# convert keys in config["request"] # convert keys in test_dict["request"]
config_dict["request"] = lower_dict_keys(config_dict["request"]) test_dict["request"] = lower_dict_keys(test_dict["request"])
# convert keys in config["request"]["headers"] return test_dict
if "headers" in config_dict["request"]:
config_dict["request"]["headers"] = lower_dict_keys(config_dict["request"]["headers"])
return config_dict
def convert_mappinglist_to_orderdict(mapping_list): def convert_mappinglist_to_orderdict(mapping_list):
""" convert mapping list to ordered dict """ convert mapping list to ordered dict

View File

@@ -184,7 +184,7 @@ class TestRunner(ApiServerUnittest):
"teardown_hooks": ["${teardown_hook_sleep_N_secs($response, 2)}"] "teardown_hooks": ["${teardown_hook_sleep_N_secs($response, 2)}"]
} }
config_dict = {} config_dict = {}
self.test_runner.init_config(config_dict, "testcase") self.test_runner.init_test(config_dict, "testcase")
start_time = time.time() start_time = time.time()
self.test_runner.run_test(test) self.test_runner.run_test(test)
@@ -215,7 +215,7 @@ class TestRunner(ApiServerUnittest):
"teardown_hooks": ["${teardown_hook_sleep_N_secs($response, 2)}"] "teardown_hooks": ["${teardown_hook_sleep_N_secs($response, 2)}"]
} }
config_dict = {} config_dict = {}
self.test_runner.init_config(config_dict, "testcase") self.test_runner.init_test(config_dict, "testcase")
start_time = time.time() start_time = time.time()
self.test_runner.run_test(test) self.test_runner.run_test(test)
@@ -241,7 +241,7 @@ class TestRunner(ApiServerUnittest):
os.getcwd(), 'tests/data/test_bugfix.yml') os.getcwd(), 'tests/data/test_bugfix.yml')
testcases = loader.load_file(testcase_file_path) testcases = loader.load_file(testcase_file_path)
config_dict = {} config_dict = {}
self.test_runner.init_config(config_dict, "testcase") self.test_runner.init_test(config_dict, "testcase")
test = testcases[2]["test"] test = testcases[2]["test"]
self.test_runner.run_test(test) self.test_runner.run_test(test)

View File

@@ -167,19 +167,19 @@ class TestUtils(ApiServerUnittest):
} }
} }
} }
new_dict = utils.lower_config_dict_key(origin_dict) new_dict = utils.lower_test_dict_keys(origin_dict)
self.assertIn("name", new_dict) self.assertIn("name", new_dict)
self.assertIn("request", new_dict) self.assertIn("request", new_dict)
self.assertIn("method", new_dict["request"]) self.assertIn("method", new_dict["request"])
self.assertIn("headers", new_dict["request"]) self.assertIn("headers", new_dict["request"])
self.assertIn("accept", new_dict["request"]["headers"]) self.assertIn("Accept", new_dict["request"]["headers"])
self.assertIn("user-agent", new_dict["request"]["headers"]) self.assertIn("User-Agent", new_dict["request"]["headers"])
origin_dict = { origin_dict = {
"Name": "test", "Name": "test",
"Request": "$default_request" "Request": "$default_request"
} }
new_dict = utils.lower_config_dict_key(origin_dict) new_dict = utils.lower_test_dict_keys(origin_dict)
self.assertIn("$default_request", new_dict["request"]) self.assertIn("$default_request", new_dict["request"])
def test_lower_dict_keys(self): def test_lower_dict_keys(self):