我现在使用Boost测试很长时间了,我的测试运行得太慢了。由于每个测试都是高度并行的,我希望它们与我的所有内核同时运行。
使用Boost测试库有没有办法做到这一点?我没有找到任何解决方案。我试着看一下如何编写自定义测试运行器,但我没有太多关于这一点的文档:(
如果没有办法,有人知道一个好的C ++测试框架来实现这个目标吗?我当时认为Google Test会完成这项工作,但显然它也无法并行运行测试。即使框架具有比其他更知名的框架更少的功能,它也不是问题,我只需要简单的断言和多线程执行。
由于
答案 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.test,gtest)
启动测试可执行文件的多个进程答案 2 :(得分:2)
将套件拆分为包含多个较小的集合,每个集合都使用单独的二进制文件启动,并根据所有这些集合将 .PHONY 目标 test 添加到您的构建系统。运行为(假设您正在使用make) make -jN test
答案 3 :(得分:0)
鉴于open issues list上的第三个要点当前是线程安全的,我不相信有办法告诉Boost测试在多个线程中运行测试。
相反,您需要找到支持并行运行测试的external test runner(我希望通过fork
新流程来实现这一点。