diff --git a/httprunner/parser.py b/httprunner/parser.py index f37dab2b..0162da30 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -483,10 +483,15 @@ class LazyString(object): try: # find next $ location match_start_position = raw_string.index("$", curr_position+1) - self._string += raw_string[curr_position:match_start_position] + remain_string = raw_string[curr_position:match_start_position] except ValueError: - self._string += raw_string[curr_position:] - break + remain_string = raw_string[curr_position:] + # break while loop + match_start_position = len(raw_string) + + remain_string = remain_string.replace("{", "{{") + remain_string = remain_string.replace("}", "}}") + self._string += remain_string def __repr__(self): return "LazyString({})".format(self.raw_string) diff --git a/tests/test_parser.py b/tests/test_parser.py index e387f402..e87dc1eb 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -326,21 +326,44 @@ class TestParserBasic(unittest.TestCase): self.assertEqual(var.to_value(variables_mapping), "ABCabc/123abc/456") var = parser.LazyString("ABC$var_1{", functions_mapping, check_variables_set) - self.assertEqual(var._string, "ABC{}{") + self.assertEqual(var._string, "ABC{}{{") self.assertEqual(var._args, ["var_1"]) - # self.assertEqual(var.to_value(variables_mapping), "ABCabc{") + self.assertEqual(var.to_value(variables_mapping), "ABCabc{") + + var = parser.LazyString("ABC$var_1}", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}}}") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc}") var = parser.LazyString("ABC$$var_1{", functions_mapping, check_variables_set) - self.assertEqual(var._string, "ABC${}{") + self.assertEqual(var._string, "ABC${}{{") self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABC$abc{") var = parser.LazyString("ABC$var_1${", functions_mapping, check_variables_set) - self.assertEqual(var._string, "ABC{}${") + self.assertEqual(var._string, "ABC{}${{") self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc${") var = parser.LazyString("ABC$var_1${a", functions_mapping, check_variables_set) - self.assertEqual(var._string, "ABC{}${a") + self.assertEqual(var._string, "ABC{}${{a") self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc${a") + + var = parser.LazyString("ABC$var_1$}a", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}$}}a") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc$}a") + + var = parser.LazyString("ABC$var_1}{a", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}}}{{a") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc}{a") + + var = parser.LazyString("ABC$var_1{}a", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}{{}}a") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "ABCabc{}a") var = parser.LazyString("ABC$var_1/$var_2/$var_1", functions_mapping, check_variables_set) self.assertEqual(var._string, "ABC{}/{}/{}")