给定一个包含数千个测试的大型项目,其中一些测试需要多分钟才能完成。当按顺序执行时,整个测试集需要超过一个小时才能完成。通过并行执行测试可以缩短测试时间。
据我所知,没有办法直接通过googletest/mock来实现这一点,比如--async
选项。还是我错了?
一种解决方案是确定可以并行运行的测试,并编写一个脚本,该脚本在一个单独的作业中启动,即
./test --gtest_filter=TestSet.test1 &
./test --gtest_filter=TestSet.test2 &
...
但这将需要额外的维护工作,并在测试代码与其执行之间引入另一个“层”。我想要一个更方便的解决方案。例如,可以将测试和TEST_F宏作为后缀,并引入TEST_ASYNC、TEST_F_ASYNC。然后,使用TEST_ASYNC定义的测试将由独立线程执行,从同一时间开始。
如何才能做到这一点?还是有别的解决办法?
发布于 2014-07-02 10:37:05
发布于 2017-07-08 15:51:27
迟来的回复,但我会把它放在这里,为任何人寻找类似的答案。在WebRTC上工作时,我发现了加快测试执行速度的类似需求。按顺序执行我们的所有测试需要超过20分钟,其中一些测试至少需要等待一段时间(因此它们甚至没有充分利用核心)。
即使对于“适当的单元测试”,我也认为这仍然是相关的,因为您的单线程测试需要20秒和1秒执行(如果您的工作站是大规模并行的,这种加速现象并不少见)。
为了解决这个问题,我开发了一个脚本,用于测试并行执行测试。这足够稳定,可以在我们的持续集成上运行,并在这里发布:https://github.com/google/gtest-parallel/
这个python脚本实质上采用指定的一个或多个gtest二进制文件的--gtest_filter=Foo
(您可以指定),将它们拆分到多个工作人员上,并并行运行单个测试。只要测试是独立的(不要写到共享文件,等等),这就很好了。对于不能正常工作的测试,我们将它们放入一个webrtc_nonparallel_tests
二进制文件中并单独运行,但是绝大多数测试已经很好了,我们修复了其中的几个,因为我们想要加速。
https://stackoverflow.com/questions/24528821
复制相似问题