refactor: change function name from parse_content to parse_data

This commit is contained in:
debugtalk
2020-04-23 21:53:03 +08:00
parent 081679bbf5
commit d6afc0fbb7
3 changed files with 45 additions and 53 deletions
+18 -26
View File
@@ -280,46 +280,38 @@ def parse_string(
return parsed_string return parsed_string
def parse_content( def parse_data(
content: Any, raw_data: Any,
variables_mapping: Dict[Text, Any] = None, variables_mapping: Dict[Text, Any] = None,
functions_mapping: Dict[Text, Callable] = None) -> Any: 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. 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 # content in string format may contains variables and functions
variables_mapping = variables_mapping or {} variables_mapping = variables_mapping or {}
functions_mapping = functions_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 elif isinstance(raw_data, (list, set, tuple)):
# 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)):
return [ return [
parse_content(item, variables_mapping, functions_mapping) parse_data(item, variables_mapping, functions_mapping)
for item in content for item in raw_data
] ]
elif isinstance(content, dict): elif isinstance(raw_data, dict):
parsed_content = {} parsed_data = {}
for key, value in content.items(): for key, value in raw_data.items():
parsed_key = parse_content(key, variables_mapping, functions_mapping) parsed_key = parse_data(key, variables_mapping, functions_mapping)
parsed_value = parse_content(value, variables_mapping, functions_mapping) parsed_value = parse_data(value, variables_mapping, functions_mapping)
parsed_content[parsed_key] = parsed_value parsed_data[parsed_key] = parsed_value
return parsed_content return parsed_data
else: else:
# other types, e.g. None, int, float, bool # other types, e.g. None, int, float, bool
return content return raw_data
def parse_variables_mapping( def parse_variables_mapping(
@@ -356,7 +348,7 @@ def parse_variables_mapping(
raise VariableNotFound(not_defined_variables) raise VariableNotFound(not_defined_variables)
try: try:
parsed_value = parse_content( parsed_value = parse_data(
var_value, parsed_variables, functions_mapping) var_value, parsed_variables, functions_mapping)
except VariableNotFound: except VariableNotFound:
continue continue
+25 -25
View File
@@ -182,7 +182,7 @@ class TestParserBasic(unittest.TestCase):
functions_mapping = { functions_mapping = {
"add_one": lambda x: x + 1 "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("/api/users/1000", result["request"]["url"])
self.assertEqual("abc123", result["request"]["headers"]["token"]) self.assertEqual("abc123", result["request"]["headers"]["token"])
self.assertEqual("POST", result["request"]["method"]) self.assertEqual("POST", result["request"]["method"])
@@ -202,63 +202,63 @@ class TestParserBasic(unittest.TestCase):
"var_6": None "var_6": None
} }
self.assertEqual( self.assertEqual(
parser.parse_content("$var_1", variables_mapping), parser.parse_data("$var_1", variables_mapping),
"abc" "abc"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("${var_1}", variables_mapping), parser.parse_data("${var_1}", variables_mapping),
"abc" "abc"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("var_1", variables_mapping), parser.parse_data("var_1", variables_mapping),
"var_1" "var_1"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("$var_1#XYZ", variables_mapping), parser.parse_data("$var_1#XYZ", variables_mapping),
"abc#XYZ" "abc#XYZ"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("${var_1}#XYZ", variables_mapping), parser.parse_data("${var_1}#XYZ", variables_mapping),
"abc#XYZ" "abc#XYZ"
) )
self.assertEqual( 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" "/abc/def/var3"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("$var_3", variables_mapping), parser.parse_data("$var_3", variables_mapping),
123 123
) )
self.assertEqual( self.assertEqual(
parser.parse_content("$var_4", variables_mapping), parser.parse_data("$var_4", variables_mapping),
{"a": 1} {"a": 1}
) )
self.assertEqual( self.assertEqual(
parser.parse_content("$var_5", variables_mapping), parser.parse_data("$var_5", variables_mapping),
True True
) )
self.assertEqual( self.assertEqual(
parser.parse_content("abc$var_5", variables_mapping), parser.parse_data("abc$var_5", variables_mapping),
"abcTrue" "abcTrue"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("abc$var_4", variables_mapping), parser.parse_data("abc$var_4", variables_mapping),
"abc{'a': 1}" "abc{'a': 1}"
) )
self.assertEqual( self.assertEqual(
parser.parse_content("$var_6", variables_mapping), parser.parse_data("$var_6", variables_mapping),
None None
) )
with self.assertRaises(VariableNotFound): with self.assertRaises(VariableNotFound):
parser.parse_content("/api/$SECRET_KEY", variables_mapping) parser.parse_data("/api/$SECRET_KEY", variables_mapping)
self.assertEqual( self.assertEqual(
parser.parse_content(["$var_1", "$var_2"], variables_mapping), parser.parse_data(["$var_1", "$var_2"], variables_mapping),
["abc", "def"] ["abc", "def"]
) )
self.assertEqual( self.assertEqual(
parser.parse_content({"$var_1": "$var_2"}, variables_mapping), parser.parse_data({"$var_1": "$var_2"}, variables_mapping),
{"abc": "def"} {"abc": "def"}
) )
@@ -268,7 +268,7 @@ class TestParserBasic(unittest.TestCase):
"var_2": "def", "var_2": "def",
} }
self.assertEqual( 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" "/abc/def/abc"
) )
@@ -278,7 +278,7 @@ class TestParserBasic(unittest.TestCase):
} }
content = "/users/$userid/training/$data?userId=$userid&data=$data" content = "/users/$userid/training/$data?userId=$userid&data=$data"
self.assertEqual( self.assertEqual(
parser.parse_content(content, variables_mapping), parser.parse_data(content, variables_mapping),
"/users/100/training/1498?userId=100&data=1498" "/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" content = "/users/$user/$userid/$data?userId=$userid&data=$data"
self.assertEqual( self.assertEqual(
parser.parse_content(content, variables_mapping), parser.parse_data(content, variables_mapping),
"/users/100/1000/1498?userId=1000&data=1498" "/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) \ "gen_random_string": lambda str_len: ''.join(random.choice(string.ascii_letters + string.digits) \
for _ in range(str_len)) 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) self.assertEqual(len(result), 5)
add_two_nums = lambda a, b=1: a + b add_two_nums = lambda a, b=1: a + b
functions_mapping["add_two_nums"] = add_two_nums functions_mapping["add_two_nums"] = add_two_nums
self.assertEqual( 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 2
) )
self.assertEqual( 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 3
) )
self.assertEqual( 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" "/api/3"
) )
with self.assertRaises(FunctionNotFound): with self.assertRaises(FunctionNotFound):
parser.parse_content("/api/${gen_md5(abc)}") parser.parse_data("/api/${gen_md5(abc)}")
def test_parse_data_testcase(self): def test_parse_data_testcase(self):
variables = { variables = {
@@ -342,7 +342,7 @@ class TestParserBasic(unittest.TestCase):
}, },
"body": "$data" "body": "$data"
} }
parsed_testcase = parser.parse_content(testcase_template, variables, functions) parsed_testcase = parser.parse_data(testcase_template, variables, functions)
self.assertEqual( self.assertEqual(
parsed_testcase["url"], parsed_testcase["url"],
"http://127.0.0.1:5000/api/users/1000/3" "http://127.0.0.1:5000/api/users/1000/3"
+2 -2
View File
@@ -3,7 +3,7 @@ from typing import List
import requests import requests
from loguru import logger 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.response import ResponseObject
from httprunner.v3.schema import TestsConfig, TestStep from httprunner.v3.schema import TestsConfig, TestStep
@@ -27,7 +27,7 @@ class TestCaseRunner(object):
# parse # parse
request_dict = step.request.dict() 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 # prepare arguments
method = parsed_request_dict.pop("method") method = parsed_request_dict.pop("method")