一个简单的工作示例,用于testtools ConcurrentStreamTestSuite

时间:2014-03-18 16:07:08

标签: python unit-testing testing

我正在寻找一个演示如何使用testtool's并发测试的简单示例。我找到了一个例子,来自here

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 个答案:

答案 0 :(得分:4)

根据StreamResult documentation,调用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。所以你可能不需要定义自己的版本。请参阅Extensions to TestResult

答案 1 :(得分:2)

查看已经实现了testtools类的concurrencytest