【发布时间】:2014-06-10 20:10:00
【问题描述】:
我有一个 Python 项目,其中包含已经实施的大量测试,我想开始对它们进行基准测试,以便比较代码、服务器等随时间推移的性能。以类似于鼻子的方式定位文件没有问题,因为无论如何我的所有测试文件的名称中都有“测试”。但是,我在尝试动态执行这些测试时遇到了一些麻烦。
截至目前,我可以运行一个脚本,该脚本将目录路径作为参数并返回如下文件路径列表:
def getTestFiles(directory):
fileList = []
print "Searching for 'test' in " + directory
if not os.path.isdir(os.path.dirname(directory)):
# throw error
raise InputError(directory, "Not a valid directory")
else:
for root, dirs, files in os.walk(directory):
#print files
for f in files:
if "test" in f and f.endswith(".py"):
fileList.append(os.path.join(root, f))
return fileList
# returns a list like this:
# [ 'C:/Users/myName/Desktop/example1_test.py',
# 'C:/Users/myName/Desktop/example2_test.py',
# 'C:/Users/myName/Desktop/folder1/example3_test.py',
# 'C:/Users/myName/Desktop/folder2/example4_test.py'... ]
问题是这些文件可能有不同的语法,我试图弄清楚如何处理。例如:
TestExampleOne:
import dummy1
import dummy2
import dummy3
class TestExampleOne(unittest.TestCase):
@classmethod
def setUpClass(cls):
# set up
def test_one(self):
# test stuff
def test_two(self):
# test stuff
def test_three(self):
# test stuff
# etc...
TestExampleTwo:
import dummy1
import dummy2
import dummy3
def setup(self):
try:
# config stuff
except Exception as e:
logger.exception(e)
def test_one():
# test stuff
def test_two():
# test stuff
def test_three():
# test stuff
# etc...
TestExampleThree:
import dummy1
import dummy2
import dummy3
def setup(self):
try:
# config stuff
except Exception as e:
logger.exception(e)
class TestExampleTwo(unittest.TestCase):
def test_one(self):
# test stuff
def test_two(self):
# test stuff
# etc...
class TestExampleThree(unittest.TestCase):
def test_one(self):
# test stuff
def test_two(self):
# test stuff
# etc...
# etc...
我真的很希望能够编写一个模块,它在目录中搜索名称中包含“test”的每个文件,然后执行每个文件中的每个单元测试,为每个测试提供执行时间。我认为像 NodeVisitor 这样的东西是在正确的轨道上,但我不确定。即使是从哪里开始的想法也将不胜感激。谢谢
【问题讨论】:
-
不是您所要求的,但相关的是vbench。它跨版本控制运行一组基准测试。请注意,随着时间的推移,测试可能会改变它们所做的事情。
-
找到
-name '*test*.py' |而读t;做时间$t;完成
标签: python unit-testing testing benchmarking