relocate variable and function validator

This commit is contained in:
httprunner
2018-08-08 00:01:54 +08:00
parent 8761f18b7f
commit 20a64c06b2
4 changed files with 60 additions and 47 deletions

View File

@@ -14,7 +14,7 @@ import string
import types import types
from datetime import datetime from datetime import datetime
from httprunner import exceptions, logger from httprunner import exceptions, logger, validator
from httprunner.compat import OrderedDict, basestring, is_py2, is_py3 from httprunner.compat import OrderedDict, basestring, is_py2, is_py3
from requests.structures import CaseInsensitiveDict from requests.structures import CaseInsensitiveDict
@@ -147,30 +147,6 @@ def deep_update_dict(origin_dict, override_dict):
return origin_dict return origin_dict
def is_function(tup):
""" Takes (name, object) tuple, returns True if it is a function.
"""
name, item = tup
return isinstance(item, types.FunctionType)
def is_variable(tup):
""" Takes (name, object) tuple, returns True if it is a variable.
"""
name, item = tup
if callable(item):
# function or class
return False
if isinstance(item, types.ModuleType):
# imported module
return False
if name.startswith("_"):
# private property
return False
return True
def get_imported_module(module_name): def get_imported_module(module_name):
""" import module and return imported module """ import module and return imported module
""" """
@@ -195,7 +171,7 @@ def filter_module(module, filter_type):
module: imported module module: imported module
filter_type: "function" or "variable" filter_type: "function" or "variable"
""" """
filter_type = is_function if filter_type == "function" else is_variable filter_type = validator.is_function if filter_type == "function" else validator.is_variable
module_functions_dict = dict(filter(filter_type, vars(module).items())) module_functions_dict = dict(filter(filter_type, vars(module).items()))
return module_functions_dict return module_functions_dict

View File

@@ -1,4 +1,5 @@
# encoding: utf-8 # encoding: utf-8
import types
""" validate data format """ validate data format
TODO: refactor with JSON schema validate TODO: refactor with JSON schema validate
@@ -43,3 +44,35 @@ def is_testcases(data_structure):
return False return False
return True return True
###############################################################################
## validate varibles and functions
###############################################################################
def is_function(tup):
""" Takes (name, object) tuple, returns True if it is a function.
"""
name, item = tup
return isinstance(item, types.FunctionType)
def is_variable(tup):
""" Takes (name, object) tuple, returns True if it is a variable.
"""
name, item = tup
if callable(item):
# function or class
return False
if isinstance(item, types.ModuleType):
# imported module
return False
if name.startswith("_"):
# private property
return False
return True

View File

@@ -1,8 +1,7 @@
import os import os
import shutil import shutil
import unittest
from httprunner import exceptions, utils from httprunner import exceptions, utils, validator
from httprunner.compat import OrderedDict from httprunner.compat import OrderedDict
from tests.base import ApiServerUnittest from tests.base import ApiServerUnittest
@@ -180,11 +179,11 @@ class TestUtils(ApiServerUnittest):
def test_search_conf_function(self): def test_search_conf_function(self):
gen_md5 = utils.search_conf_item("tests/data/demo_binds.yml", "function", "gen_md5") gen_md5 = utils.search_conf_item("tests/data/demo_binds.yml", "function", "gen_md5")
self.assertTrue(utils.is_function(("gen_md5", gen_md5))) self.assertTrue(validator.is_function(("gen_md5", gen_md5)))
self.assertEqual(gen_md5("abc"), "900150983cd24fb0d6963f7d28e17f72") self.assertEqual(gen_md5("abc"), "900150983cd24fb0d6963f7d28e17f72")
gen_md5 = utils.search_conf_item("tests/data/subfolder/test.yml", "function", "gen_md5") gen_md5 = utils.search_conf_item("tests/data/subfolder/test.yml", "function", "gen_md5")
self.assertTrue(utils.is_function(("_", gen_md5))) self.assertTrue(validator.is_function(("_", gen_md5)))
self.assertEqual(gen_md5("abc"), "900150983cd24fb0d6963f7d28e17f72") self.assertEqual(gen_md5("abc"), "900150983cd24fb0d6963f7d28e17f72")
with self.assertRaises(exceptions.FunctionNotFound): with self.assertRaises(exceptions.FunctionNotFound):
@@ -195,11 +194,11 @@ class TestUtils(ApiServerUnittest):
def test_search_conf_variable(self): def test_search_conf_variable(self):
SECRET_KEY = utils.search_conf_item("tests/data/demo_binds.yml", "variable", "SECRET_KEY") SECRET_KEY = utils.search_conf_item("tests/data/demo_binds.yml", "variable", "SECRET_KEY")
self.assertTrue(utils.is_variable(("SECRET_KEY", SECRET_KEY))) self.assertTrue(validator.is_variable(("SECRET_KEY", SECRET_KEY)))
self.assertEqual(SECRET_KEY, "DebugTalk") self.assertEqual(SECRET_KEY, "DebugTalk")
SECRET_KEY = utils.search_conf_item("tests/data/subfolder/test.yml", "variable", "SECRET_KEY") SECRET_KEY = utils.search_conf_item("tests/data/subfolder/test.yml", "variable", "SECRET_KEY")
self.assertTrue(utils.is_variable(("SECRET_KEY", SECRET_KEY))) self.assertTrue(validator.is_variable(("SECRET_KEY", SECRET_KEY)))
self.assertEqual(SECRET_KEY, "DebugTalk") self.assertEqual(SECRET_KEY, "DebugTalk")
with self.assertRaises(exceptions.VariableNotFound): with self.assertRaises(exceptions.VariableNotFound):
@@ -208,21 +207,6 @@ class TestUtils(ApiServerUnittest):
with self.assertRaises(exceptions.VariableNotFound): with self.assertRaises(exceptions.VariableNotFound):
utils.search_conf_item("/user/local/bin", "variable", "SECRET_KEY") utils.search_conf_item("/user/local/bin", "variable", "SECRET_KEY")
def test_is_variable(self):
var1 = 123
var2 = "abc"
self.assertTrue(utils.is_variable(("var1", var1)))
self.assertTrue(utils.is_variable(("var2", var2)))
__var = 123
self.assertFalse(utils.is_variable(("__var", __var)))
func = lambda x: x + 1
self.assertFalse(utils.is_variable(("func", func)))
self.assertFalse(utils.is_variable(("os", os)))
self.assertFalse(utils.is_variable(("utils", utils)))
def test_handle_config_key_case(self): def test_handle_config_key_case(self):
origin_dict = { origin_dict = {
"Name": "test", "Name": "test",

View File

@@ -33,3 +33,23 @@ class TestValidator(unittest.TestCase):
} }
] ]
self.assertTrue(data_structure) self.assertTrue(data_structure)
def test_is_variable(self):
var1 = 123
var2 = "abc"
self.assertTrue(validator.is_variable(("var1", var1)))
self.assertTrue(validator.is_variable(("var2", var2)))
__var = 123
self.assertFalse(validator.is_variable(("__var", __var)))
func = lambda x: x + 1
self.assertFalse(validator.is_variable(("func", func)))
self.assertFalse(validator.is_variable(("unittest", unittest)))
def test_is_function(self):
func = lambda x: x + 1
self.assertTrue(validator.is_function(("func", func)))
self.assertTrue(validator.is_function(("func", validator.is_testcase)))