From d6afc0fbb79447068c3509344fd77b00f2dd6c28 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 21 Apr 2020 11:44:00 +0800 Subject: [PATCH] refactor: change function name from parse_content to parse_data --- httprunner/v3/parser.py | 44 +++++++++++++------------------ httprunner/v3/parser_test.py | 50 ++++++++++++++++++------------------ httprunner/v3/runner.py | 4 +-- 3 files changed, 45 insertions(+), 53 deletions(-) diff --git a/httprunner/v3/parser.py b/httprunner/v3/parser.py index 965d6f22..8292bb36 100644 --- a/httprunner/v3/parser.py +++ b/httprunner/v3/parser.py @@ -280,46 +280,38 @@ def parse_string( return parsed_string -def parse_content( - content: Any, +def parse_data( + raw_data: Any, variables_mapping: Dict[Text, Any] = None, functions_mapping: Dict[Text, Callable] = None) -> Any: - """ parse content with evaluated variables mapping. + """ parse raw data with evaluated variables mapping. Notice: variables_mapping should not contain any variable or function. """ - if isinstance(content, str): + if isinstance(raw_data, str): # content in string format may contains variables and functions variables_mapping = variables_mapping or {} functions_mapping = functions_mapping or {} - content = content.strip() + raw_data = raw_data.strip() + return parse_string(raw_data, variables_mapping, functions_mapping) - # replace functions with evaluated value - # Notice: parse_string_functions must be called before parse_string_variables - # content = parse_string_functions(content, variables_mapping, functions_mapping) - - # replace variables with binding value - # content = parse_string_variables(content, variables_mapping) - - return parse_string(content, variables_mapping, functions_mapping) - - elif isinstance(content, (list, set, tuple)): + elif isinstance(raw_data, (list, set, tuple)): return [ - parse_content(item, variables_mapping, functions_mapping) - for item in content + parse_data(item, variables_mapping, functions_mapping) + for item in raw_data ] - elif isinstance(content, dict): - parsed_content = {} - for key, value in content.items(): - parsed_key = parse_content(key, variables_mapping, functions_mapping) - parsed_value = parse_content(value, variables_mapping, functions_mapping) - parsed_content[parsed_key] = parsed_value + elif isinstance(raw_data, dict): + parsed_data = {} + for key, value in raw_data.items(): + parsed_key = parse_data(key, variables_mapping, functions_mapping) + parsed_value = parse_data(value, variables_mapping, functions_mapping) + parsed_data[parsed_key] = parsed_value - return parsed_content + return parsed_data else: # other types, e.g. None, int, float, bool - return content + return raw_data def parse_variables_mapping( @@ -356,7 +348,7 @@ def parse_variables_mapping( raise VariableNotFound(not_defined_variables) try: - parsed_value = parse_content( + parsed_value = parse_data( var_value, parsed_variables, functions_mapping) except VariableNotFound: continue diff --git a/httprunner/v3/parser_test.py b/httprunner/v3/parser_test.py index 32546c2b..c63cab93 100644 --- a/httprunner/v3/parser_test.py +++ b/httprunner/v3/parser_test.py @@ -182,7 +182,7 @@ class TestParserBasic(unittest.TestCase): functions_mapping = { "add_one": lambda x: x + 1 } - result = parser.parse_content(content, variables_mapping, functions_mapping) + result = parser.parse_data(content, variables_mapping, functions_mapping) self.assertEqual("/api/users/1000", result["request"]["url"]) self.assertEqual("abc123", result["request"]["headers"]["token"]) self.assertEqual("POST", result["request"]["method"]) @@ -202,63 +202,63 @@ class TestParserBasic(unittest.TestCase): "var_6": None } self.assertEqual( - parser.parse_content("$var_1", variables_mapping), + parser.parse_data("$var_1", variables_mapping), "abc" ) self.assertEqual( - parser.parse_content("${var_1}", variables_mapping), + parser.parse_data("${var_1}", variables_mapping), "abc" ) self.assertEqual( - parser.parse_content("var_1", variables_mapping), + parser.parse_data("var_1", variables_mapping), "var_1" ) self.assertEqual( - parser.parse_content("$var_1#XYZ", variables_mapping), + parser.parse_data("$var_1#XYZ", variables_mapping), "abc#XYZ" ) self.assertEqual( - parser.parse_content("${var_1}#XYZ", variables_mapping), + parser.parse_data("${var_1}#XYZ", variables_mapping), "abc#XYZ" ) self.assertEqual( - parser.parse_content("/$var_1/$var_2/var3", variables_mapping), + parser.parse_data("/$var_1/$var_2/var3", variables_mapping), "/abc/def/var3" ) self.assertEqual( - parser.parse_content("$var_3", variables_mapping), + parser.parse_data("$var_3", variables_mapping), 123 ) self.assertEqual( - parser.parse_content("$var_4", variables_mapping), + parser.parse_data("$var_4", variables_mapping), {"a": 1} ) self.assertEqual( - parser.parse_content("$var_5", variables_mapping), + parser.parse_data("$var_5", variables_mapping), True ) self.assertEqual( - parser.parse_content("abc$var_5", variables_mapping), + parser.parse_data("abc$var_5", variables_mapping), "abcTrue" ) self.assertEqual( - parser.parse_content("abc$var_4", variables_mapping), + parser.parse_data("abc$var_4", variables_mapping), "abc{'a': 1}" ) self.assertEqual( - parser.parse_content("$var_6", variables_mapping), + parser.parse_data("$var_6", variables_mapping), None ) with self.assertRaises(VariableNotFound): - parser.parse_content("/api/$SECRET_KEY", variables_mapping) + parser.parse_data("/api/$SECRET_KEY", variables_mapping) self.assertEqual( - parser.parse_content(["$var_1", "$var_2"], variables_mapping), + parser.parse_data(["$var_1", "$var_2"], variables_mapping), ["abc", "def"] ) self.assertEqual( - parser.parse_content({"$var_1": "$var_2"}, variables_mapping), + parser.parse_data({"$var_1": "$var_2"}, variables_mapping), {"abc": "def"} ) @@ -268,7 +268,7 @@ class TestParserBasic(unittest.TestCase): "var_2": "def", } self.assertEqual( - parser.parse_content("/$var_1/$var_2/$var_1", variables_mapping), + parser.parse_data("/$var_1/$var_2/$var_1", variables_mapping), "/abc/def/abc" ) @@ -278,7 +278,7 @@ class TestParserBasic(unittest.TestCase): } content = "/users/$userid/training/$data?userId=$userid&data=$data" self.assertEqual( - parser.parse_content(content, variables_mapping), + parser.parse_data(content, variables_mapping), "/users/100/training/1498?userId=100&data=1498" ) @@ -289,7 +289,7 @@ class TestParserBasic(unittest.TestCase): } content = "/users/$user/$userid/$data?userId=$userid&data=$data" self.assertEqual( - parser.parse_content(content, variables_mapping), + parser.parse_data(content, variables_mapping), "/users/100/1000/1498?userId=1000&data=1498" ) @@ -299,26 +299,26 @@ class TestParserBasic(unittest.TestCase): "gen_random_string": lambda str_len: ''.join(random.choice(string.ascii_letters + string.digits) \ for _ in range(str_len)) } - result = parser.parse_content("${gen_random_string(5)}", functions_mapping=functions_mapping) + result = parser.parse_data("${gen_random_string(5)}", functions_mapping=functions_mapping) self.assertEqual(len(result), 5) add_two_nums = lambda a, b=1: a + b functions_mapping["add_two_nums"] = add_two_nums self.assertEqual( - parser.parse_content("${add_two_nums(1)}", functions_mapping=functions_mapping), + parser.parse_data("${add_two_nums(1)}", functions_mapping=functions_mapping), 2 ) self.assertEqual( - parser.parse_content("${add_two_nums(1, 2)}", functions_mapping=functions_mapping), + parser.parse_data("${add_two_nums(1, 2)}", functions_mapping=functions_mapping), 3 ) self.assertEqual( - parser.parse_content("/api/${add_two_nums(1, 2)}", functions_mapping=functions_mapping), + parser.parse_data("/api/${add_two_nums(1, 2)}", functions_mapping=functions_mapping), "/api/3" ) with self.assertRaises(FunctionNotFound): - parser.parse_content("/api/${gen_md5(abc)}") + parser.parse_data("/api/${gen_md5(abc)}") def test_parse_data_testcase(self): variables = { @@ -342,7 +342,7 @@ class TestParserBasic(unittest.TestCase): }, "body": "$data" } - parsed_testcase = parser.parse_content(testcase_template, variables, functions) + parsed_testcase = parser.parse_data(testcase_template, variables, functions) self.assertEqual( parsed_testcase["url"], "http://127.0.0.1:5000/api/users/1000/3" diff --git a/httprunner/v3/runner.py b/httprunner/v3/runner.py index 76277225..3e3c3489 100644 --- a/httprunner/v3/runner.py +++ b/httprunner/v3/runner.py @@ -3,7 +3,7 @@ from typing import List import requests from loguru import logger -from httprunner.v3.parser import build_url, parse_content, parse_variables_mapping +from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping from httprunner.v3.response import ResponseObject from httprunner.v3.schema import TestsConfig, TestStep @@ -27,7 +27,7 @@ class TestCaseRunner(object): # parse request_dict = step.request.dict() - parsed_request_dict = parse_content(request_dict, step.variables, self.config.functions) + parsed_request_dict = parse_data(request_dict, step.variables, self.config.functions) # prepare arguments method = parsed_request_dict.pop("method")