如何并行运行unittest?是否有输出一致的并行测试库
适配unittest并行执行且输出与原生完全一致的方案
存在满足需求的第三方实现,优先选对原生unittest无侵入、直接复用原生结果输出逻辑的库即可,不需要修改现有测试用例代码。
首选库:
concurrencytest
这个库基于unittest原生扩展点实现,没有重写核心的测试结果收集、输出逻辑,仅做用例的并发调度,只要替换测试套件的加载逻辑,仍然使用原生unittest.TextTestRunner执行,输出的用例进度标识、错误栈格式、最终统计字段(运行用例数、失败数、错误数、跳过数统计行)和单线程运行原生unittest的结果完全一致。
基础使用示例:import unittest from concurrencytest import ConcurrentTestSuite, fork_for_tests if __name__ == '__main__': # 原生用例加载逻辑不需要改动 test_loader = unittest.TestLoader() test_suite = test_loader.discover(start_dir='./test_dir', pattern='test_*.py') # 初始化原生runner,输出逻辑完全沿用原生实现 runner = unittest.TextTestRunner(verbosity=2) # 包装为并发套件,指定并行进程数,例如设置为4进程 concurrent_suite = ConcurrentTestSuite(test_suite, fork_for_tests(4)) runner.run(concurrent_suite)这种实现方式不会引入额外框架的冗余输出,也不会改动测试结果的展示规则。
备选方案:
pytest+pytest-xdist
如果可以接受用pytest作为执行入口,不需要修改任何原有unittest用例,pytest原生兼容unittest语法,配合pytest-xdist可实现多进程并行执行,通过指定-o log_cli=false --tb=line -q等参数对齐输出格式,也能做到和原生unittest输出基本一致,只是参数调试成本比直接用concurrencytest高。
避坑提示:部分自行实现TestResult类的并行库会改写错误收集、结果统计逻辑,会出现输出字段缺失、格式错位的问题,选型时优先选复用原生TextTestRunner、TestResult逻辑的实现即可保证输出完全对齐。
内容的提问来源于stack exchange,提问作者Logtism
相关产品推荐
相关产品推荐

