gpt4 book ai didi

c++ - Googletest:如何异步运行测试?

转载 作者:行者123 更新时间:2023-11-28 20:04:48 31 4
gpt4 key购买 nike

给定一个包含数千个测试的大型项目,其中一些测试需要几分钟才能完成。按顺序执行时,整套测试需要一个多小时才能完成。通过并行执行测试可以减少测试时间。

据我所知,没有办法直接从 googletest/mock 执行此操作,例如 --async 选项。还是我错了?

一个解决方案是确定可以并行运行的测试,并编写一个脚本在单独的作业中启动每个测试,即

./test --gtest_filter=TestSet.test1 &
./test --gtest_filter=TestSet.test2 &
...

但这将需要额外的维护工作,并在测试代码及其执行之间引入另一个“层”。我想要一个更方便的解决方案。例如,可以在 TEST 和 TEST_F 宏后缀并引入 TEST_ASYNC、TEST_F_ASYNC。然后,用 TEST_ASYNC 定义的测试将由独立线程同时开始执行。

如何实现?或者有其他解决方案吗?

最佳答案

回复晚了,但我会把它放在这里,供任何搜索类似答案的人使用。在 WebRTC 上工作时,我发现有类似的需要来加快我们的测试执行速度。按顺序执行我们所有的测试花费了 20 多分钟,其中一些测试至少花费了一些时间等待(因此它们甚至没有完全利用一个内核)。

即使对于“适当的单元测试”,我认为这仍然是相关的,因为执行单线程测试需要 20 秒和大约 1 秒是有区别的(如果你的工作站是大规模并行的,这种加速不是不常见)。

为了帮我们解决这个问题,我开发了一个测试脚本来并行执行测试。这足够稳定,可以在我们的持续集成上运行,并在此处发布:https://github.com/google/gtest-parallel/

这个 python 脚本本质上采用 --gtest_filter=Foo(您可以指定)指定的一个或多个 gtest 二进制文件,将它们拆分到多个工作程序上并并行运行单独的测试。只要测试是独立的(不要写入共享文件等),这就可以正常工作。对于运行不佳的测试,我们将它们放在 webrtc_nonparallel_tests 二进制文件中并分别运行,但绝大多数测试都已经很好,我们修复了其中几个,因为我们想要加速。

关于c++ - Googletest:如何异步运行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24528821/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com