Python的单元测试可以并行测试吗,比如鼻子可以吗?

Odd*_*ing 46 python unit-testing

Python的NOSE测试框架具有并行运行多个测试的概念.

这样做的目的不是测试代码中的并发性,而是为没有副作用,没有排序问题,没有外部依赖性的代码进行测试,运行得更快.性能增益来自于访问不同设备时的并发I/O等待,更好地使用多CPU /内核以及并行运行time.sleep()语句.

我相信使用Python的单元测试框架可以通过插件Test Runner完成同样的事情.

有没有人有这种野兽的经验,他们可以提出任何建议吗?

die*_*dha 23

Python unittest的内置testrunner不会并行运行测试.写一个这样做可能不会太难.我自己写的只是为了重新格式化每个测试的输出和时间.那可能每天花费1/2.我认为你可以换掉与使用多进程的派生程序一起使用的TestSuite类,而不会有太多麻烦.

  • 我接受了这个答案,因为其含义是现在没有现成的. (3认同)

Joe*_*Joe 19

所述testtools包是支持同时运行的测试单元测试的延伸.它可以与继承的旧测试类一起使用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())
Run Code Online (Sandbox Code Playgroud)

  • 刚刚测试了这个,我的测试仍按顺序运行:-( (3认同)

小智 7

如果您只需要 Python3 支持,请考虑使用我的fastunit

我只是更改了 unittest 的一些代码,使测试用例作为协程运行。

它真的节省了我的时间。

我上周刚完成,可能测试不够,如果有任何错误,请告诉我,以便我改进,谢谢!


小智 6

如果你想并行运行,请使用pytest-xdist.

pytest-xdist插件使用一些独特的测试执行模式扩展了py.test:

  • 测试运行并行化:如果您有多个CPU或主机,则可以将它们用于组合测试运行.这允许加速开发或使用远程机器的特殊资源.

[...]

更多信息:Rohan Dunham的博客


小智 5

如果您没有那么多测试用例并且它们不相互依赖,另一个可能更简单的选择是在单独的过程中手动启动每个测试用例。

例如,打开几个 tmux 会话,然后使用以下内容在每个会话中启动一个测试用例:

python -m unittest -v MyTestModule.MyTestClass.test_n
Run Code Online (Sandbox Code Playgroud)