11

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

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

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

谢谢

4

4 回答 4

18

您可以为此使用CTest 。

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

我没有亲自将 Boost.Test 与 CMake 一起使用(我们使用 GoogleTest),但这个问题更详细地介绍了该过程。

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

于 2012-10-08T21:28:35.537 回答
9

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

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

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

于 2012-10-08T21:51:30.020 回答
2

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

于 2012-10-08T22:04:04.333 回答
0

鉴于未解决问题列表中的第三个要点目前是线程安全,我认为没有办法告诉 Boost 测试在多个线程中运行测试。

相反,您需要找到一个支持并行运行测试的外部测试运行程序(我希望这可以通过fork关闭新进程来工作)。

于 2012-10-08T21:47:38.443 回答