refactor: change function name from parse_content to parse_data

This commit is contained in:
debugtalk
2020-04-21 11:44:00 +08:00
parent 081679bbf5
commit d6afc0fbb7
3 changed files with 45 additions and 53 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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")