relocalte extract_variables

This commit is contained in:
debugtalk
2018-07-30 00:27:01 +08:00
parent e32e89c379
commit adb00d5558
5 changed files with 67 additions and 63 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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()"),

View File

@@ -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 = {