如何在多核机器上加速Python的'unittest'?

14 投票
4 回答
10580 浏览
提问于 2025-04-15 18:04

我正在使用Python的 unittest 来测试一些外部应用程序,但逐个运行测试的时间太长了。

我该如何利用多核CPU的优势来加快这个过程?我能不能调整 unittest 让测试并行执行?怎么做呢?

这个问题不是关于Python的 GIL 限制,因为实际上耗时的不是Python代码,而是我通过 os.system() 执行的外部应用程序。

4 个回答

0

你可以考虑使用 multiprocessing 这个库,让每个测试在不同的进程中运行。这意味着每个单元测试(或者一组单元测试)应该是独立的,不需要共享状态。这样做会开启其他进程,并且会利用其他的处理器核心。

具体可以查看这个页面上的“使用工作池”( http://docs.python.org/library/multiprocessing.html#using-a-pool-of-workers

编辑: 这个模块从2.6版本开始就包含在内了。

4

testtools这个包是对unittest的一个扩展,它支持同时运行多个测试。你可以把它和你以前写的那些继承自unittest.TestCase的测试类一起使用。

举个例子:

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())
6

如果你的测试内容不太复杂,你可以试着用 py.test 来运行它们。这个工具支持 分布式测试,也就是说你可以在多个地方同时运行测试。如果你不是在Windows系统上,那么 nose 也可能适合你。

撰写回答