2012-09-06 185 views
12

我现在正在使用Boost Test很长一段时间,最后我的测试运行得太慢了。由于每个测试都非常平行,我希望它们能够与我的所有内核同时运行。有没有办法同时运行C++单元测试测试?

有没有办法使用Boost Test Library来做到这一点?我没有找到任何解决方案。我试图寻找一个如何编写自定义测试亚军,但我没有太多的文档关于该点:(

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

感谢

回答

14

您可以使用CTest这一点。

CTEST是随CMake(构建系统生成器)一起提供的测试驱动程序,因此您需要使用CMake使用现有文件和测试来创建构建系统,并且这样做后,您将能够使用CTest来运行测试可执行文件。

我还没有亲自使用Boost.Test和CMake(我们使用GoogleTest),但this question进入了一个更详细的过程。

一旦您在CMakeLists文件中添加了测试,您可以使用CTest's -j argument来指定并行运行多少个作业。

+0

这真棒:)即使它有点混乱,我必须对cmake文件进行一些更改,它的工作原理!非常感谢 –

0

鉴于open issues list上的第三个要点目前是线程安全的,我不相信有一种方法可以告诉Boost测试在多线程中运行测试。相反,你需要找到一个支持并行运行测试的external test runner(我希望这可以通过fork工作)。

9

谷歌在gtest文档中暗示的是test sharding--让多台机器仅通过使用命令行参数和环境变量即可运行测试。您可以在分离的进程中的一台机器上运行它们,并在其中正确设置GTEST_SHARD_INDEX和GTEST_TOTAL_SHARDS环境变量。

原则上,没有什么阻止您启动测试可执行的多个进程使用不同的过滤参数(Boost.testgtest

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

3

拆分的套件,由多个较小的集每个都使用单独的二进制启动,并将.PHONY目标测试添加到您的构建系统,具体取决于它们。运行(假设您正在使用make)make -jN test

+0

这是一个好主意,但问题是我必须创建尽可能多的可执行测试,因为我有测试,我更喜欢更自动化的东西。 –

+1

@BaptisteWicht - 你可以有一个启动器将测试名称作为命令行参数(就像Boost.Test一样) – bobah

相关问题