mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
refactor: change function name from parse_content to parse_data
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user