From 8d568d9e0d1c4fa5e059ded32b4c239e4e1f9343 Mon Sep 17 00:00:00 2001 From: httprunner Date: Tue, 12 Sep 2017 22:32:52 +0800 Subject: [PATCH] request in config should also be parsed --- ate/context.py | 30 ++++++++----------- ate/runner.py | 11 +++---- tests/data/debugtalk.py | 1 + ...demo_testset_template_import_functions.yml | 2 +- ...demo_testset_template_lambda_functions.yml | 2 +- tests/data/demo_testset_variables.yml | 2 +- tests/test_context.py | 10 +++---- 7 files changed, 26 insertions(+), 32 deletions(-) diff --git a/ate/context.py b/ate/context.py index e658e3e3..0b3fb508 100644 --- a/ate/context.py +++ b/ate/context.py @@ -32,7 +32,6 @@ class Context(object): # testcase config shall inherit from testset configs, # but can not change testset configs, that's why we use copy.deepcopy here. self.testcase_functions_config = copy.deepcopy(self.testset_functions_config) - self.testcase_request_config = {} self.testcase_variables_mapping = copy.deepcopy(self.testset_shared_variables_mapping) self.testcase_parser.bind_functions(self.testcase_functions_config) @@ -131,7 +130,11 @@ class Context(object): self.testcase_functions_config.update(config_mapping) self.testcase_parser.bind_functions(self.testcase_functions_config) - def register_request(self, request_dict, level="testcase"): + def get_parsed_request(self, request_dict, level="testcase"): + """ get parsed request with bind variables and functions. + @param request_dict: request config mapping + @param level: testset or testcase + """ if "headers" in request_dict: # convert keys in request headers to lowercase headers = request_dict.pop("headers") @@ -139,27 +142,18 @@ class Context(object): raise ParamsError("HTTP Request Headers invalid!") request_dict["headers"] = {key.lower(): headers[key] for key in headers} - self.__update_context_request_config(level, request_dict) - - def __update_context_request_config(self, level, config_mapping): - """ - @param level: testset or testcase - @param config_type: request - @param config_mapping: request config mapping - """ if level == "testset": - self.testset_request_config.update(config_mapping) + request_dict = self.testcase_parser.parse_content_with_bindings( + request_dict + ) + self.testset_request_config.update(request_dict) - self.testcase_request_config = utils.deep_update_dict( + testcase_request_config = utils.deep_update_dict( copy.deepcopy(self.testset_request_config), - config_mapping + request_dict ) - - def get_parsed_request(self): - """ get parsed request, with bind variables and functions. - """ parsed_request = self.testcase_parser.parse_content_with_bindings( - self.testcase_request_config + testcase_request_config ) return parsed_request diff --git a/ate/runner.py b/ate/runner.py index 1caeb287..c24a29cf 100644 --- a/ate/runner.py +++ b/ate/runner.py @@ -41,7 +41,7 @@ class Runner(object): "headers": { "Content-Type": "application/json" } - + }, "json": { "sign": "f1219719911caae89ccc301679857ebfda115ca2" } @@ -52,10 +52,12 @@ class Runner(object): self.context.config_context(config_dict, level) request_config = config_dict.get('request', {}) - base_url = request_config.pop("base_url", None) + parsed_request = self.context.get_parsed_request(request_config, level) + + base_url = parsed_request.pop("base_url", None) self.http_client_session = self.http_client_session or HttpSession(base_url) - self.context.register_request(request_config, level) + return parsed_request def run_test(self, testcase): """ run single testcase. @@ -83,8 +85,7 @@ class Runner(object): } @return True or raise exception during test """ - self.init_config(testcase, level="testcase") - parsed_request = self.context.get_parsed_request() + parsed_request = self.init_config(testcase, level="testcase") try: url = parsed_request.pop('url') diff --git a/tests/data/debugtalk.py b/tests/data/debugtalk.py index 19dd4ce8..491e4103 100644 --- a/tests/data/debugtalk.py +++ b/tests/data/debugtalk.py @@ -15,6 +15,7 @@ except NameError: import urllib.parse as urllib SECRET_KEY = "DebugTalk" +BASE_URL = "http://127.0.0.1:5000" def get_sign(*args): content = ''.join(args).encode('ascii') diff --git a/tests/data/demo_testset_template_import_functions.yml b/tests/data/demo_testset_template_import_functions.yml index bfb789bc..6531a497 100644 --- a/tests/data/demo_testset_template_import_functions.yml +++ b/tests/data/demo_testset_template_import_functions.yml @@ -8,7 +8,7 @@ - os_platform: 'ios' - app_version: '2.8.6' request: - base_url: http://127.0.0.1:5000 + base_url: $BASE_URL headers: Content-Type: application/json device_sn: $device_sn diff --git a/tests/data/demo_testset_template_lambda_functions.yml b/tests/data/demo_testset_template_lambda_functions.yml index 7ea5c42e..df2e98aa 100644 --- a/tests/data/demo_testset_template_lambda_functions.yml +++ b/tests/data/demo_testset_template_lambda_functions.yml @@ -18,7 +18,7 @@ - os_platform: 'ios' - app_version: '2.8.6' request: - base_url: http://127.0.0.1:5000 + base_url: $BASE_URL headers: Content-Type: application/json device_sn: $device_sn diff --git a/tests/data/demo_testset_variables.yml b/tests/data/demo_testset_variables.yml index fe77c4b1..7a62e6ab 100644 --- a/tests/data/demo_testset_variables.yml +++ b/tests/data/demo_testset_variables.yml @@ -3,7 +3,7 @@ variable_binds: - device_sn: 'HZfFBh6tU59EdXJ' request: - base_url: http://127.0.0.1:5000 + base_url: $BASE_URL headers: Content-Type: application/json device_sn: $device_sn diff --git a/tests/test_context.py b/tests/test_context.py index 369d30c3..0b40d6f5 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -178,7 +178,7 @@ class VariableBindsUnittest(unittest.TestCase): SECRET_KEY = context_variables["SECRET_KEY"] self.assertEqual(SECRET_KEY, "DebugTalk") - def test_register_request(self): + def test_parse_request(self): request_dict = { "url": "http://debugtalk.com", "method": "GET", @@ -187,9 +187,8 @@ class VariableBindsUnittest(unittest.TestCase): "USER-AGENT": "ios/10.3" } } - self.context.register_request(request_dict) - parsed_request = self.context.get_parsed_request() + parsed_request = self.context.get_parsed_request(request_dict) self.assertIn("content-type", parsed_request["headers"]) self.assertIn("user-agent", parsed_request["headers"]) @@ -197,7 +196,7 @@ class VariableBindsUnittest(unittest.TestCase): "headers": "invalid headers" } with self.assertRaises(ParamsError): - self.context.register_request(request_dict) + self.context.get_parsed_request(request_dict) def test_get_parsed_request(self): test_runner = runner.Runner() @@ -221,8 +220,7 @@ class VariableBindsUnittest(unittest.TestCase): "data": "$data" } } - test_runner.init_config(testcase, level="testcase") - parsed_request = test_runner.context.get_parsed_request() + parsed_request = test_runner.init_config(testcase, level="testcase") self.assertIn("authorization", parsed_request["headers"]) self.assertEqual(len(parsed_request["headers"]["authorization"]), 32) self.assertIn("random", parsed_request["headers"])