有没有办法并行运行C ++单元测试测试?

时间:2012-09-06 16:59:55

标签: c++ multithreading unit-testing concurrency boost-test

我现在使用Boost测试很长时间了,我的测试运行得太慢了。由于每个测试都是高度并行的,我希望它们与我的所有内核同时运行。

使用Boost测试库有没有办法做到这一点?我没有找到任何解决方案。我试着看一下如何编写自定义测试运行器,但我没有太多关于这一点的文档:(

如果没有办法,有人知道一个好的C ++测试框架来实现这个目标吗?我当时认为Google Test会完成这项工作,但显然它也无法并行运行测试。即使框架具有比其他更知名的框架更少的功能,它也不是问题,我只需要简单的断言和多线程执行。

由于

4 个答案:

答案 0 :(得分:15)

您可以使用CTest

CTest是CMake(构建系统生成器)附带的测试驱动程序,因此您需要使用CMake使用现有文件和测试来创建构建系统,这样您就可以使用CTest运行测试可执行文件。

我没有亲自使用Boake.Test与CMake(我们使用GoogleTest),但this question详细介绍了该过程。

在CMakeLists文件中添加测试后,您可以使用CTest's -j argument指定并行运行的作业数。

答案 1 :(得分:9)

谷歌在gtest文档中暗示的是test sharding - 让多台机器只使用命令行参数和环境变量来运行测试。您可以在单独的进程中的一台计算机上运行它们,在这些进程中可以适当地设置GTEST_SHARD_INDEX和GTEST_TOTAL_SHARDS环境变量。

原则上,没有任何东西妨碍您使用不同的过滤参数(Boost.testgtest

启动测试可执行文件的多个进程

2014年更新:https://github.com/google/gtest-parallel

答案 2 :(得分:2)

将套件拆分为包含多个较小的集合,每个集合都使用单独的二进制文件启动,并根据所有这些集合将 .PHONY 目标 test 添加到您的构建系统。运行为(假设您正在使用make) make -jN test

答案 3 :(得分:0)

鉴于open issues list上的第三个要点当前是线程安全的,我不相信有办法告诉Boost测试在多个线程中运行测试。

相反,您需要找到支持并行运行测试的external test runner(我希望通过fork新流程来实现这一点。