From f0f3061538a9bd9bea7c172846dc4d7348e32a0f Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 16 Apr 2019 19:20:49 +0800 Subject: [PATCH] fix: match duplicate variable/function in raw string e.g. "ABC$var_1/123$var_1/456" "ABC${func1($var_1, $var_3)}--${func1($var_1, $var_3)}" --- httprunner/__about__.py | 2 +- httprunner/parser.py | 2 ++ tests/test_parser.py | 26 ++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/httprunner/__about__.py b/httprunner/__about__.py index cc08e19b..2a95ad4c 100644 --- a/httprunner/__about__.py +++ b/httprunner/__about__.py @@ -1,7 +1,7 @@ __title__ = 'HttpRunner' __description__ = 'One-stop solution for HTTP(S) testing.' __url__ = 'https://github.com/HttpRunner/HttpRunner' -__version__ = '2.1.1' +__version__ = '2.1.2' __author__ = 'debugtalk' __author_email__ = 'mail@debugtalk.com' __license__ = 'Apache-2.0' diff --git a/httprunner/parser.py b/httprunner/parser.py index b9c3a36c..5d574034 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -458,6 +458,7 @@ class LazyString(object): self.check_variables_set ) args_mapping[match_start_position] = lazy_func + match_start_position += len(func_str) # search variable like $var var_match_list = regex_findall_variables(self._string) @@ -474,6 +475,7 @@ class LazyString(object): # self._string = self._string.replace("}", "}}") self._string = self._string.replace(var, "{}", 1) args_mapping[match_start_position] = var_name + match_start_position += len(var) self._args = [args_mapping[key] for key in sorted(args_mapping.keys())] diff --git a/tests/test_parser.py b/tests/test_parser.py index fe5ad205..00fe4358 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -320,6 +320,11 @@ class TestParserBasic(unittest.TestCase): self.assertEqual(var._args, ["var_1"]) self.assertEqual(var.to_value(variables_mapping), "ABCabc$") + var = parser.LazyString("ABC$var_1/123$var_1/456", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}/123{}/456") + self.assertEqual(var._args, ["var_1", "var_1"]) + 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._args, ["var_1"]) @@ -361,6 +366,27 @@ class TestParserBasic(unittest.TestCase): self.assertEqual(var._string, "ABC{}{}") self.assertEqual(var.to_value(variables_mapping), "ABCabc123True") + var = parser.LazyString( + "ABC${func1($var_1, $var_3)}--${func1($var_1, $var_3)}", + functions_mapping, + check_variables_set + ) + self.assertEqual(var._string, "ABC{}--{}") + self.assertEqual(var.to_value(variables_mapping), "ABCabc123--abc123") + + var = parser.LazyString("ABC${func1($var_1, $var_3)}$var_1", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC{}{}") + self.assertEqual(var.to_value(variables_mapping), "ABCabc123abc") + + # TODO: fix + # var = parser.LazyString( + # "ABC${func1($var_1, $var_3)}$var_1--${func1($var_1, $var_3)}$var_1", + # functions_mapping, + # check_variables_set + # ) + # self.assertEqual(var._string, "ABC{}{}--{}{}") + # self.assertEqual(var.to_value(variables_mapping), "ABCabc123abc--abc123abc") + var = parser.LazyString("ABC${func1($var_1, $var_3)}DE$var_4", functions_mapping, check_variables_set) self.assertEqual(var._string, "ABC{}DE{}") self.assertEqual(var.to_value(variables_mapping), "ABCabc123DE{'a': 1}")