fix bug when nested function and variable exists in variables:

e.g.

"variables": {
    "host2": "https://httprunner.org",
    "num4": "${sum_two($num0, 5)}",
    "num3": "${sum_two($num2, 4)}",
    "num2": "${sum_two($num1, 3)}",
    "num1": "${sum_two(1, 2)}"
}
This commit is contained in:
debugtalk
2018-12-19 19:35:27 +08:00
parent 751a7469d8
commit 78015e281d
2 changed files with 234 additions and 67 deletions

View File

@@ -212,7 +212,7 @@ class TestParser(unittest.TestCase):
"/abc/def/abc"
)
self.assertEqual(
parser.parse_string_variables("${func($var_1, $var_2, xyz)}", variables_mapping),
parser.parse_string_variables("${func($var_1, $var_2, xyz)}", variables_mapping, {}),
"${func(abc, def, xyz)}"
)
self.assertEqual(
@@ -483,7 +483,7 @@ class TestParser(unittest.TestCase):
parsed_tests_mapping = parser.parse_tests(tests_mapping)
test_dict1_variables = parsed_tests_mapping["testcases"][0]["teststeps"][0]["variables"]
self.assertEqual(test_dict1_variables["creator"], "user_test_001")
self.assertEqual(test_dict1_variables["username"], "$creator")
self.assertEqual(test_dict1_variables["username"], "user_test_001")
def test_parse_tests_base_url_priority(self):
""" base_url & verify: priority test_dict > config
@@ -495,7 +495,7 @@ class TestParser(unittest.TestCase):
'name': '',
"base_url": "$host",
'variables': {
"host": "https://debugtalk"
"host": "https://debugtalk.com"
},
"verify": False
},
@@ -522,7 +522,7 @@ class TestParser(unittest.TestCase):
'name': '',
"base_url": "$host1",
'variables': {
"host1": "https://debugtalk"
"host1": "https://debugtalk.com"
}
},
"teststeps": [
@@ -549,7 +549,7 @@ class TestParser(unittest.TestCase):
'name': '',
"base_url": "$host1",
'variables': {
"host1": "https://debugtalk"
"host1": "https://debugtalk.com"
}
},
"teststeps": [
@@ -569,6 +569,140 @@ class TestParser(unittest.TestCase):
test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0]
self.assertEqual(test_dict["request"]["url"], "https://httprunner.org/api1")
def test_parse_data_with_variables(self):
variables = {
"host2": "https://httprunner.org",
"num3": "${sum_two($num2, 4)}",
"num2": "${sum_two($num1, 3)}",
"num1": "${sum_two(1, 2)}"
}
from tests.debugtalk import sum_two
functions = {
"sum_two": sum_two
}
parsed_testcase = parser.parse_data(variables, variables, functions)
self.assertEqual(parsed_testcase["num3"], 10)
self.assertEqual(parsed_testcase["num2"], 6)
self.assertEqual(parsed_testcase["num1"], 3)
def test_parse_data_with_variables_not_found(self):
variables = {
"host": "https://httprunner.org",
"num4": "${sum_two($num0, 5)}",
"num3": "${sum_two($num2, 4)}",
"num2": "${sum_two($num1, 3)}",
"num1": "${sum_two(1, 2)}"
}
from tests.debugtalk import sum_two
functions = {
"sum_two": sum_two
}
with self.assertRaises(exceptions.VariableNotFound):
parser.parse_data(variables, variables, functions)
parsed_testcase = parser.parse_data(
variables,
variables,
functions,
raise_if_variable_not_found=False
)
self.assertEqual(parsed_testcase["num3"], 10)
self.assertEqual(parsed_testcase["num2"], 6)
self.assertEqual(parsed_testcase["num1"], 3)
self.assertEqual(parsed_testcase["num4"], "${sum_two($num0, 5)}")
def test_parse_tests_variable_with_function(self):
from tests.debugtalk import sum_two
tests_mapping = {
"project_mapping": {
"functions": {
"sum_two": sum_two
}
},
'testcases': [
{
"config": {
'name': '',
"base_url": "$host1",
'variables': {
"host1": "https://debugtalk.com"
}
},
"teststeps": [
{
'name': 'testcase1',
"base_url": "$host2",
"variables": {
"host2": "https://httprunner.org",
"num3": "${sum_two($num2, 4)}",
"num2": "${sum_two($num1, 3)}",
"num1": "${sum_two(1, 2)}"
},
'request': {
'url': '/api1/?num1=$num1&num2=$num2&num3=$num3',
'method': 'GET'
}
}
]
}
]
}
parsed_tests_mapping = parser.parse_tests(tests_mapping)
test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0]
self.assertEqual(test_dict["variables"]["num3"], 10)
self.assertEqual(test_dict["variables"]["num2"], 6)
self.assertEqual(
test_dict["request"]["url"],
"https://httprunner.org/api1/?num1=3&num2=6&num3=10"
)
def test_parse_tests_variable_not_found(self):
from tests.debugtalk import sum_two
tests_mapping = {
"project_mapping": {
"functions": {
"sum_two": sum_two
}
},
'testcases': [
{
"config": {
'name': '',
"base_url": "$host1",
'variables': {
"host1": "https://debugtalk.com"
}
},
"teststeps": [
{
'name': 'testcase1',
"base_url": "$host2",
"variables": {
"host2": "https://httprunner.org",
"num4": "${sum_two($num0, 5)}",
"num3": "${sum_two($num2, 4)}",
"num2": "${sum_two($num1, 3)}",
"num1": "${sum_two(1, 2)}"
},
'request': {
'url': '/api1/?num1=$num1&num2=$num2&num3=$num3&num4=$num4',
'method': 'GET'
}
}
]
}
]
}
parsed_tests_mapping = parser.parse_tests(tests_mapping)
test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0]
self.assertEqual(test_dict["variables"]["num3"], 10)
self.assertEqual(test_dict["variables"]["num2"], 6)
self.assertEqual(test_dict["variables"]["num4"], "${sum_two($num0, 5)}")
self.assertEqual(
test_dict["request"]["url"],
"https://httprunner.org/api1/?num1=$num1&num2=$num2&num3=$num3&num4=$num4"
)
def test_parse_tests_base_url_teststep_empty(self):
""" base_url & verify: priority test_dict > config
"""
@@ -579,7 +713,7 @@ class TestParser(unittest.TestCase):
'name': '',
"base_url": "$host",
'variables': {
"host": "https://debugtalk"
"host": "https://debugtalk.com"
},
"verify": False
},
@@ -595,7 +729,7 @@ class TestParser(unittest.TestCase):
}
parsed_tests_mapping = parser.parse_tests(tests_mapping)
test_dict = parsed_tests_mapping["testcases"][0]["teststeps"][0]
self.assertEqual(test_dict["request"]["url"], "https://debugtalk/api1")
self.assertEqual(test_dict["request"]["url"], "https://debugtalk.com/api1")
self.assertEqual(test_dict["request"]["verify"], True)
def test_parse_environ(self):