首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并行运行junit测试,通过jenkins/ intellij实现性能最大化

并行运行junit测试,通过jenkins/ intellij实现性能最大化
EN

Stack Overflow用户
提问于 2019-04-25 05:25:02
回答 1查看 417关注 0票数 1

我有一个项目,其中包含大约50个junit测试。每个测试大约需要5-6分钟来运行,因为它试图断言一些数据,这些数据需要大约5-6分钟的时间才能在redshift中可用(测试在redshift中查找数据)。现在我正在尝试并行运行所有测试,并期望所有测试最多在15-20分钟内运行。我尝试使用test.runWith(){maxParallelForks}选项,但测试花费了一个多小时。这些测试都是独立的。有没有一种有效的方法来并行化它们?

注意:这是一个邻居测试,而不仅仅是junit。因此,我不能将结果模拟为从邻居系统之间的实际交互中得出的结果。

谢谢

下面是我正在使用的:

代码语言:javascript
运行
复制
tasks.withType(Test) {
    maxParallelForks = 50
}

我们的目标是让它们在最多20-25分钟内运行,但这需要一个多小时。

EN

回答 1

Stack Overflow用户

发布于 2019-04-25 13:50:15

  1. 使用以下数据在test/resources文件夹中创建一个名为junit-platform.properties的文件:

代码语言:javascript
运行
复制
junit.jupiter.execution.parallel.enabled=false
junit.jupiter.execution.parallel.config.strategy=fixed
junit.jupiter.execution.parallel.config.fixed.parallelism=4

我有一个4核(没有超线程)。您还可以尝试dynamic选项。

使用@Execution(ExecutionMode.CONCURRENT)注释您的类的

这是关于这个主题的a great article。还有一个here

我还尝试了并行测试执行,并得出了以下结论:

  • 如果测试很短(虽然不是你的例子),那就不值得了。在处理短测试时,设置整个多线程测试环境的工作和稍后的上下文切换不会带来任何性能提升。(我有过ca 150+单元测试)
  • 在处理Spring时,测试需要正确配置。当您并行启动容器时,它们不能尝试使用相同的端口等。此外,您还必须了解上下文缓存。(即使测试B不需要组件XYZ,我也要求spring初始化它,然后它意识到测试A已经有了相同的配置,因此上下文被重用,这比让两个不同的容器在多个线程上启动更好的性能增益。)
  • 如果您的测试包含代码(就像您的例子一样),您可以“等待”一个事件来完成测试,使用多个线程是可行的。
  • 最后:“听起来不错,但不起作用。”-在我的本地机器上,并行执行导致了一定程度的性能增益(IntelliJ,maven),但在我们的CI服务器中,我们只有一个虚拟核心机器,在那里请求固定的4个线程会导致性能大幅下降。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55838780

复制
相关文章

相似问题

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