有没有一种方法可以并行运行C++单元测试

Is there a way to run C++ Unit Tests tests in parallel?

本文关键字:并行 运行 C++ 单元测试 方法 一种 有没有      更新时间:2023-10-16

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

有没有一种方法可以使用Boost测试库来做到这一点?我没有找到任何解决方案。我试着寻找一个如何编写自定义测试运行程序的方法,但我没有太多关于这一点的文档:(

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

感谢

您可以为此使用CTest。

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

我个人还没有使用过CMake的Boost.Test(我们使用的是GoogleTest),但这个问题会详细介绍这个过程。

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

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

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

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

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

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

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