From d85f85446ef5aa32f38ad947cfb33050a6471813 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 8 Aug 2018 00:01:54 +0800 Subject: [PATCH] relocate variable and function validator --- httprunner/utils.py | 28 ++-------------------------- httprunner/validator.py | 33 +++++++++++++++++++++++++++++++++ tests/test_utils.py | 26 +++++--------------------- tests/test_validator.py | 20 ++++++++++++++++++++ 4 files changed, 60 insertions(+), 47 deletions(-) diff --git a/httprunner/utils.py b/httprunner/utils.py index de37435b..7fbf7766 100644 --- a/httprunner/utils.py +++ b/httprunner/utils.py @@ -14,7 +14,7 @@ import string import types 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 requests.structures import CaseInsensitiveDict @@ -147,30 +147,6 @@ def deep_update_dict(origin_dict, override_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): """ import module and return imported module """ @@ -195,7 +171,7 @@ def filter_module(module, filter_type): module: imported module 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())) return module_functions_dict diff --git a/httprunner/validator.py b/httprunner/validator.py index 0dbf0cb0..e47553f1 100644 --- a/httprunner/validator.py +++ b/httprunner/validator.py @@ -1,4 +1,5 @@ # encoding: utf-8 +import types """ validate data format TODO: refactor with JSON schema validate @@ -43,3 +44,35 @@ def is_testcases(data_structure): return False 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 + diff --git a/tests/test_utils.py b/tests/test_utils.py index 319730cd..ed394fe4 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,8 +1,7 @@ import os import shutil -import unittest -from httprunner import exceptions, utils +from httprunner import exceptions, utils, validator from httprunner.compat import OrderedDict from tests.base import ApiServerUnittest @@ -180,11 +179,11 @@ class TestUtils(ApiServerUnittest): def test_search_conf_function(self): 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") 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") with self.assertRaises(exceptions.FunctionNotFound): @@ -195,11 +194,11 @@ class TestUtils(ApiServerUnittest): def test_search_conf_variable(self): 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") 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") with self.assertRaises(exceptions.VariableNotFound): @@ -208,21 +207,6 @@ class TestUtils(ApiServerUnittest): with self.assertRaises(exceptions.VariableNotFound): 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): origin_dict = { "Name": "test", diff --git a/tests/test_validator.py b/tests/test_validator.py index 5e1822da..49a291f6 100644 --- a/tests/test_validator.py +++ b/tests/test_validator.py @@ -33,3 +33,23 @@ class TestValidator(unittest.TestCase): } ] 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)))