fix parser:

check if reference variable itself
check if reference variable not in variables_mapping
This commit is contained in:
debugtalk
2020-04-20 15:44:26 +08:00
parent 9ef70bd06b
commit 86d8f052e3
2 changed files with 49 additions and 1 deletions

View File

@@ -173,7 +173,25 @@ def parse_variables_mapping(variables_mapping: Dict[Text, Any]) -> Dict[Text, An
continue
var_value = variables_mapping[var_name]
# variables = extract_variables(var_value)
variables = extract_variables(var_value)
# check if reference variable itself
if var_name in variables:
# e.g.
# variables_mapping = {"token": "abc$token"}
# variables_mapping = {"key": ["$key", 2]}
raise exceptions.VariableNotFound(var_name)
# check if reference variable not in variables_mapping
not_defined_variables = [
v_name
for v_name in variables
if v_name not in variables_mapping
]
if not_defined_variables:
# e.g. {"varA": "123$varB", "varB": "456$varC"}
# e.g. {"varC": "${sum_two($a, $b)}"}
raise VariableNotFound(not_defined_variables)
try:
parsed_value = parse_content(var_value, parsed_variables)

View File

@@ -0,0 +1,30 @@
import unittest
from httprunner.v3.parser import parse_variables_mapping
from httprunner.v3.exceptions import VariableNotFound
class TestParserBasic(unittest.TestCase):
def test_parse_variables_mapping(self):
variables = {
"varA": "$varB",
"varB": "$varC",
"varC": "123",
"a": 1,
"b": 2
}
parsed_variables = parse_variables_mapping(variables)
print(parsed_variables)
self.assertEqual(parsed_variables["varA"], "123")
self.assertEqual(parsed_variables["varB"], "123")
def test_parse_variables_mapping_exception(self):
variables = {
"varA": "$varB",
"varB": "$varC",
"a": 1,
"b": 2
}
with self.assertRaises(VariableNotFound):
parse_variables_mapping(variables)