mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-10 23:12:41 +08:00
search variables in debugtalk.py recursively upward
This commit is contained in:
@@ -1 +1 @@
|
|||||||
__version__ = '0.6.2'
|
__version__ = '0.6.3'
|
||||||
@@ -87,40 +87,6 @@ def parse_function(content):
|
|||||||
|
|
||||||
return function_meta
|
return function_meta
|
||||||
|
|
||||||
def eval_content_variables(content, variable_mapping):
|
|
||||||
""" replace all variables of string content with mapping value.
|
|
||||||
@param (str) content
|
|
||||||
@return (str) parsed content
|
|
||||||
|
|
||||||
e.g.
|
|
||||||
variable_mapping = {
|
|
||||||
"var_1": "abc",
|
|
||||||
"var_2": "def"
|
|
||||||
}
|
|
||||||
$var_1 => "abc"
|
|
||||||
$var_1#XYZ => "abc#XYZ"
|
|
||||||
/$var_1/$var_2/var3 => "/abc/def/var3"
|
|
||||||
${func($var_1, $var_2, xyz)} => "${func(abc, def, xyz)}"
|
|
||||||
"""
|
|
||||||
variables_list = extract_variables(content)
|
|
||||||
for variable_name in variables_list:
|
|
||||||
if variable_name not in variable_mapping:
|
|
||||||
raise exception.ParamsError(
|
|
||||||
"%s is not defined in bind variables!" % variable_name)
|
|
||||||
|
|
||||||
variable_value = variable_mapping.get(variable_name)
|
|
||||||
if "${}".format(variable_name) == content:
|
|
||||||
# content is a variable
|
|
||||||
content = variable_value
|
|
||||||
else:
|
|
||||||
# content contains one or many variables
|
|
||||||
content = content.replace(
|
|
||||||
"${}".format(variable_name),
|
|
||||||
str(variable_value), 1
|
|
||||||
)
|
|
||||||
|
|
||||||
return content
|
|
||||||
|
|
||||||
|
|
||||||
class TestcaseParser(object):
|
class TestcaseParser(object):
|
||||||
|
|
||||||
@@ -194,6 +160,37 @@ class TestcaseParser(object):
|
|||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
def eval_content_variables(self, content):
|
||||||
|
""" replace all variables of string content with mapping value.
|
||||||
|
@param (str) content
|
||||||
|
@return (str) parsed content
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
variable_mapping = {
|
||||||
|
"var_1": "abc",
|
||||||
|
"var_2": "def"
|
||||||
|
}
|
||||||
|
$var_1 => "abc"
|
||||||
|
$var_1#XYZ => "abc#XYZ"
|
||||||
|
/$var_1/$var_2/var3 => "/abc/def/var3"
|
||||||
|
${func($var_1, $var_2, xyz)} => "${func(abc, def, xyz)}"
|
||||||
|
"""
|
||||||
|
variables_list = extract_variables(content)
|
||||||
|
for variable_name in variables_list:
|
||||||
|
variable_value = self.get_bind_item("variable", variable_name)
|
||||||
|
|
||||||
|
if "${}".format(variable_name) == content:
|
||||||
|
# content is a variable
|
||||||
|
content = variable_value
|
||||||
|
else:
|
||||||
|
# content contains one or many variables
|
||||||
|
content = content.replace(
|
||||||
|
"${}".format(variable_name),
|
||||||
|
str(variable_value), 1
|
||||||
|
)
|
||||||
|
|
||||||
|
return content
|
||||||
|
|
||||||
def parse_content_with_bindings(self, content):
|
def parse_content_with_bindings(self, content):
|
||||||
""" parse content recursively, each variable and function in content will be evaluated.
|
""" parse content recursively, each variable and function in content will be evaluated.
|
||||||
|
|
||||||
@@ -249,6 +246,6 @@ class TestcaseParser(object):
|
|||||||
content = self.eval_content_functions(content)
|
content = self.eval_content_functions(content)
|
||||||
|
|
||||||
# replace variables with binding value
|
# replace variables with binding value
|
||||||
content = eval_content_variables(content, self.variables_binds)
|
content = self.eval_content_variables(content)
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|||||||
@@ -54,62 +54,68 @@ class TestcaseParserUnittest(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_eval_content_variables(self):
|
def test_eval_content_variables(self):
|
||||||
variable_mapping = {
|
variable_binds = {
|
||||||
"var_1": "abc",
|
"var_1": "abc",
|
||||||
"var_2": "def",
|
"var_2": "def",
|
||||||
"var_3": 123,
|
"var_3": 123,
|
||||||
"var_4": {"a": 1},
|
"var_4": {"a": 1},
|
||||||
"var_5": True,
|
"var_5": True
|
||||||
"var_6": None
|
|
||||||
}
|
}
|
||||||
|
testcase_parser = testcase.TestcaseParser(variables_binds=variable_binds)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("$var_1", variable_mapping),
|
testcase_parser.eval_content_variables("$var_1"),
|
||||||
"abc"
|
"abc"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("var_1", variable_mapping),
|
testcase_parser.eval_content_variables("var_1"),
|
||||||
"var_1"
|
"var_1"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("$var_1#XYZ", variable_mapping),
|
testcase_parser.eval_content_variables("$var_1#XYZ"),
|
||||||
"abc#XYZ"
|
"abc#XYZ"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("/$var_1/$var_2/var3", variable_mapping),
|
testcase_parser.eval_content_variables("/$var_1/$var_2/var3"),
|
||||||
"/abc/def/var3"
|
"/abc/def/var3"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("/$var_1/$var_2/$var_1", variable_mapping),
|
testcase_parser.eval_content_variables("/$var_1/$var_2/$var_1"),
|
||||||
"/abc/def/abc"
|
"/abc/def/abc"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("${func($var_1, $var_2, xyz)}", variable_mapping),
|
testcase_parser.eval_content_variables("${func($var_1, $var_2, xyz)}"),
|
||||||
"${func(abc, def, xyz)}"
|
"${func(abc, def, xyz)}"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("$var_3", variable_mapping),
|
testcase_parser.eval_content_variables("$var_3"),
|
||||||
123
|
123
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("$var_4", variable_mapping),
|
testcase_parser.eval_content_variables("$var_4"),
|
||||||
{"a": 1}
|
{"a": 1}
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("$var_5", variable_mapping),
|
testcase_parser.eval_content_variables("$var_5"),
|
||||||
True
|
True
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("abc$var_5", variable_mapping),
|
testcase_parser.eval_content_variables("abc$var_5"),
|
||||||
"abcTrue"
|
"abcTrue"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
testcase.eval_content_variables("abc$var_4", variable_mapping),
|
testcase_parser.eval_content_variables("abc$var_4"),
|
||||||
"abc{'a': 1}"
|
"abc{'a': 1}"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
|
||||||
testcase.eval_content_variables("$var_6", variable_mapping),
|
def test_eval_content_variables_search_upward(self):
|
||||||
None
|
testcase_parser = testcase.TestcaseParser()
|
||||||
)
|
|
||||||
|
with self.assertRaises(ParamsError):
|
||||||
|
testcase_parser.eval_content_variables("/api/$SECRET_KEY")
|
||||||
|
|
||||||
|
testcase_parser.file_path = "tests/data/demo_testset_hardcode.yml"
|
||||||
|
content = testcase_parser.eval_content_variables("/api/$SECRET_KEY")
|
||||||
|
self.assertEqual(content, "/api/DebugTalk")
|
||||||
|
|
||||||
def test_parse_string_value(self):
|
def test_parse_string_value(self):
|
||||||
self.assertEqual(testcase.parse_string_value("123"), 123)
|
self.assertEqual(testcase.parse_string_value("123"), 123)
|
||||||
|
|||||||
Reference in New Issue
Block a user