首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Googletest:如何异步运行测试?

Googletest:如何异步运行测试?
EN

Stack Overflow用户
提问于 2014-07-02 10:30:05
回答 2查看 10.8K关注 0票数 5

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

据我所知,没有办法直接通过googletest/mock来实现这一点,比如--async选项。还是我错了?

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

代码语言:javascript
运行
复制
./test --gtest_filter=TestSet.test1 &
./test --gtest_filter=TestSet.test2 &
...

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

如何才能做到这一点?还是有别的解决办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-02 10:37:05

我认为你是在解决错误的问题。您希望单元测试能够快速运行,实际上,如果一个测试需要几分钟才能运行,那么它就不是单元测试。

我建议您将测试分成适当的单元测试和集成/回归测试或缓慢运行的测试。然后,您可以在开发时运行单元测试,只需在推送/提交之前运行运行时间较长的测试即可。

您甚至可以同时运行两个(或更多)测试集。

文档本身建议使用过滤器来解决这个问题。

编辑根据否决,和一个新的玩具中提到的文档。

自从我给出了这个答案之后,文档已经被更新,现在提到了一个平行转轮,它“列出每个二进制文件的测试,然后在单独的进程中对工作人员执行它们”,这将解决问题。当我第一次写答案的时候,这是不存在的。

票数 3
EN

Stack Overflow用户

发布于 2017-07-08 15:51:27

迟来的回复,但我会把它放在这里,为任何人寻找类似的答案。在WebRTC上工作时,我发现了加快测试执行速度的类似需求。按顺序执行我们的所有测试需要超过20分钟,其中一些测试至少需要等待一段时间(因此它们甚至没有充分利用核心)。

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

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

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24528821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档