【问题标题】:A simple, working example for testtools ConcurrentStreamTestSuite一个简单的测试工具 ConcurrentStreamTestSuite 的工作示例
【发布时间】:2014-03-18 16:07:08
【问题描述】:

我正在寻找一个简单的示例来演示如何使用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 的方法也不做任何事情。

【问题讨论】:

    标签: python unit-testing testing


    【解决方案1】:

    根据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

    【讨论】:

    • 这有帮助。您知道最终打印错误和状态的实现吗?而不是我自己写一个?
    • @Dejell,对不起,我不知道。
    【解决方案2】:

    看看 concurrencytest 已经实现了 testtools 类的库

    【讨论】:

    • 太好了,我在 psutil 中成功使用了它,但它不支持 Windows。 testtools 和 subunit 在代码质量和文档方面看起来都很棒,但令人难以置信的是,它们没有提供有关如何使用 API 来编写简单的并行测试运行程序的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多