testtools ConcurrentStreamTestSuite 的简单工作示例
我在找一个简单的例子,来演示如何使用testtool的并发测试。我找到一个例子,来自这里:
import unittest
import testtools
class MyTester(unittest.TestCase):
# Tests...
suite = unittest.TestLoader().loadTestsFromTestCase(MyTester)
concurrent_suite = testtools.ConcurrentStreamTestSuite(lambda: ((case, None) for case in suite))
concurrent_suite.run(testtools.StreamResult())
不过,这个例子有一个比较大的问题。它没有告诉你你的测试是通过了还是失败了。不仅如此,StreamResult对象是临时的,而且StreamResult的方法也没有任何作用。
2 个回答
2
可以看看这个concurrencytest库,它已经实现了一些测试工具的类。
5
根据StreamResult
的文档,status
这个方法是用来处理事件的,而它的默认实现其实什么都不做。
如果你想让它打印一些东西,就需要继承这个方法,自己实现想要的功能。例如,想要打印发生了什么:
import unittest
import testtools
class MyTester(unittest.TestCase):
def test_foo(self):
self.assertEqual(1+2, 2)
def test_foo2(self):
self.assertEqual(1+2, 3)
class TracingStreamResult(testtools.StreamResult):
def status(self, *args, **kwargs):
print('{0[test_id]}: {0[test_status]}'.format(kwargs))
suite = unittest.TestLoader().loadTestsFromTestCase(MyTester)
concurrent_suite = testtools.ConcurrentStreamTestSuite(lambda: ((case, None) for case in suite))
result = TracingStreamResult()
result.startTestRun()
concurrent_suite.run(result)
result.stopTestRun()
不过,已经有很多类是继承了StreamResult
的,所以你可能不需要自己再定义一个版本。可以看看TestResult的扩展。