如何从脚本重复运行Python单元测试并收集结果
我现在搞不清楚怎么在一个Python脚本里运行单个单元测试,并收集结果。
场景是这样的:我有一组测试,用来检查不同对象产生的各种统计分布的方法。这些测试有时候会失败,这其实是正常的,因为我主要是在检查某种特定的随机性。我想从脚本里或者直接从解释器里重复运行这些测试,并收集结果以便进一步分析。
假设我有一个模块叫做myTest.py,里面有:
class myTest(unittest.TestCase):
def setup(self):
...building objects, etc....
def testTest1(self):
..........
def testTest2(self):
..........
基本上我需要:
- 运行设置方法
- 运行testTest1(比如),100次
- 收集失败的结果
- 返回这些失败的结果
我找到的最接近的解决办法是(用了一些类似问题的代码):
from unittest import TextTestRunner, TestSuite
runner = TextTestRunner(verbosity = 2)
tests = ['testTest1']
suite = unittest.TestSuite(map(myTest, tests))
runner.run(suite)
但是这个方法不行,因为:
runner.run(suite)
并没有运行设置方法
而且
我也无法捕捉到当testTest1失败时抛出的异常
1 个回答
2
你只需要把想要多次运行的测试添加到测试套件里就可以了。
下面是一个完整的代码示例。你也可以在一个互动的Python控制台上查看这个代码的运行,来证明它确实有效。
import unittest
import random
class NullWriter(object):
def write(*_, **__):
pass
def flush(*_, **__):
pass
SETUP_COUNTER = 0
class MyTestCase(unittest.TestCase):
def setUp(self):
global SETUP_COUNTER
SETUP_COUNTER += 1
def test_one(self):
self.assertTrue(random.random() > 0.3)
def test_two(self):
# We just want to make sure this isn't run
self.assertTrue(False, "This should not have been run")
def suite():
tests = []
for _ in range(100):
tests.append('test_one')
return unittest.TestSuite(map(MyTestCase, tests))
results = unittest.TextTestRunner(stream=NullWriter()).run(suite())
print dir(results)
print 'setUp was run', SETUP_COUNTER, 'times'