有没有一种方法可以并行运行C++单元测试
Is there a way to run C++ Unit Tests tests in parallel?
我已经使用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
关闭新进程来实现)。
- 为什么我不能让 3 个网络摄像头与 pthreads 并行运行?
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- 如果事件在仍在执行时再次设置,RegisterWaitForSingleObject 是否会并行运行回调?
- 如何并行运行与OpenGL并行的程序
- 在 2 个并行运行的脚本(python 和 C++)之间传递消息
- 从Qt/C++-App并行运行两个Lua函数
- C++ - 谷歌测试 - 如何在不同的目录中并行运行所有测试?
- 如何使用 Turbo C++并行运行两个功能,一个用于键盘,一个用于鼠标?
- OpenMP 似乎不是并行运行的
- 使用 vector<thread> 和 .join() 未并行运行的多线程C++程序
- 最大线程数 - 如何确定C++线程是否并行运行?
- 等待条件变量后未并行运行的线程
- 单元测试任务使用 QThreadPool 并行运行
- 这是否有意义,我的计算机只能并行运行4个线程
- 为什么两个执行矩阵乘法的过程并行运行比连续运行慢
- C++STL多线程,并行运行计算
- 在C++中并行运行线程
- 如何在C 中使用OpenMP并行运行两组代码
- 并行运行一个应用程序,同时用 C++ 启动另一个应用程序
- 有没有一种方法可以并行运行C++单元测试