From adb00d5558b3c01a9a6bd346dca93107d74b935c Mon Sep 17 00:00:00 2001 From: debugtalk Date: Mon, 30 Jul 2018 00:27:01 +0800 Subject: [PATCH] relocalte extract_variables --- httprunner/context.py | 2 +- httprunner/parser.py | 18 +++++++++++++++++ httprunner/testcase.py | 19 ++--------------- tests/test_parser.py | 46 ++++++++++++++++++++++++++++++++++++++++++ tests/test_testcase.py | 45 ----------------------------------------- 5 files changed, 67 insertions(+), 63 deletions(-) diff --git a/httprunner/context.py b/httprunner/context.py index 64900560..35d9c8a5 100644 --- a/httprunner/context.py +++ b/httprunner/context.py @@ -177,7 +177,7 @@ class Context(object): # 5, regex string, e.g. "LB[\d]*(.*)RB[\d]*" if isinstance(check_item, (dict, list)) \ - or testcase.extract_variables(check_item) \ + or parser.extract_variables(check_item) \ or testcase.extract_functions(check_item): # format 1/2/3 check_value = self.eval_content(check_item) diff --git a/httprunner/parser.py b/httprunner/parser.py index d66111f8..caa63a80 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -3,6 +3,7 @@ import re from httprunner import exceptions +variable_regexp = r"\$([\w_]+)" function_regexp_compile = re.compile(r"^([\w_]+)\(([\$\w\.\-_ =,]*)\)$") @@ -22,6 +23,23 @@ def parse_string_value(str_value): return str_value +def extract_variables(content): + """ extract all variable names from content, which is in format $variable + @param (str) content + @return (list) variable name list + + e.g. $variable => ["variable"] + /blog/$postid => ["postid"] + /$var1/$var2 => ["var1", "var2"] + abc => [] + """ + # TODO: change variable notation from $var to {{var}} + try: + return re.findall(variable_regexp, content) + except TypeError: + return [] + + def parse_function(content): """ parse function name and args from string content. @param (str) content diff --git a/httprunner/testcase.py b/httprunner/testcase.py index 85bf9c99..f50c7058 100644 --- a/httprunner/testcase.py +++ b/httprunner/testcase.py @@ -11,25 +11,10 @@ from httprunner import exceptions, loader, logger, parser, utils from httprunner.compat import (OrderedDict, basestring, builtin_str, numeric_types, str) -variable_regexp = r"\$([\w_]+)" + function_regexp = r"\$\{([\w_]+\([\$\w\.\-_ =,]*\))\}" -def extract_variables(content): - """ extract all variable names from content, which is in format $variable - @param (str) content - @return (list) variable name list - - e.g. $variable => ["variable"] - /blog/$postid => ["postid"] - /$var1/$var2 => ["var1", "var2"] - abc => [] - """ - try: - return re.findall(variable_regexp, content) - except TypeError: - return [] - def extract_functions(content): """ extract all functions from string content, which are in format ${fun()} @param (str) content @@ -298,7 +283,7 @@ class TestcaseParser(object): /$var_1/$var_2/var3 => "/abc/def/var3" ${func($var_1, $var_2, xyz)} => "${func(abc, def, xyz)}" """ - variables_list = extract_variables(content) + variables_list = parser.extract_variables(content) for variable_name in variables_list: variable_value = self.get_bind_variable(variable_name) diff --git a/tests/test_parser.py b/tests/test_parser.py index e4369e34..7589c5c2 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -12,6 +12,52 @@ class TestParser(unittest.TestCase): self.assertEqual(parser.parse_string_value("$var"), "$var") self.assertEqual(parser.parse_string_value("${func}"), "${func}") + def test_extract_variables(self): + self.assertEqual( + parser.extract_variables("$var"), + ["var"] + ) + self.assertEqual( + parser.extract_variables("$var123"), + ["var123"] + ) + self.assertEqual( + parser.extract_variables("$var_name"), + ["var_name"] + ) + self.assertEqual( + parser.extract_variables("var"), + [] + ) + self.assertEqual( + parser.extract_variables("a$var"), + ["var"] + ) + self.assertEqual( + parser.extract_variables("$v ar"), + ["v"] + ) + self.assertEqual( + parser.extract_variables(" "), + [] + ) + self.assertEqual( + parser.extract_variables("$abc*"), + ["abc"] + ) + self.assertEqual( + parser.extract_variables("${func()}"), + [] + ) + self.assertEqual( + parser.extract_variables("${func(1,2)}"), + [] + ) + self.assertEqual( + parser.extract_variables("${gen_md5($TOKEN, $data, $random)}"), + ["TOKEN", "data", "random"] + ) + def test_parse_function(self): self.assertEqual( parser.parse_function("func()"), diff --git a/tests/test_testcase.py b/tests/test_testcase.py index 5f53ec1c..c16583e2 100644 --- a/tests/test_testcase.py +++ b/tests/test_testcase.py @@ -120,51 +120,6 @@ class TestcaseParserUnittest(unittest.TestCase): 3 * 2 * 3 ) - def test_extract_variables(self): - self.assertEqual( - testcase.extract_variables("$var"), - ["var"] - ) - self.assertEqual( - testcase.extract_variables("$var123"), - ["var123"] - ) - self.assertEqual( - testcase.extract_variables("$var_name"), - ["var_name"] - ) - self.assertEqual( - testcase.extract_variables("var"), - [] - ) - self.assertEqual( - testcase.extract_variables("a$var"), - ["var"] - ) - self.assertEqual( - testcase.extract_variables("$v ar"), - ["v"] - ) - self.assertEqual( - testcase.extract_variables(" "), - [] - ) - self.assertEqual( - testcase.extract_variables("$abc*"), - ["abc"] - ) - self.assertEqual( - testcase.extract_variables("${func()}"), - [] - ) - self.assertEqual( - testcase.extract_variables("${func(1,2)}"), - [] - ) - self.assertEqual( - testcase.extract_variables("${gen_md5($TOKEN, $data, $random)}"), - ["TOKEN", "data", "random"] - ) def test_eval_content_variables(self): variables = {