繁体   English   中英

Gradle 的 java 插件如何并行运行 JUnit 测试:每个 fork 一个队列还是一个队列和多个 fork?

[英]How does Gradle's java plugin run JUnit tests in parallel: one queue per fork or a single queue and multiple forks?

我最近一直在尝试 Gradle,我之前没有任何使用它的经验,到目前为止我已经能够做我想做的事情并且对结果感到满意。 但是,就我而言,我必须使用 JUnit 运行 Selenium 测试,其中一些测试比其他测试大不成比例(即:25 分钟 vs 4 分钟)。

使用maxParallelForks选项时,有时需要的时间比我预期的要长,因为测试似乎是预先分配给叉子的,有时我最终会得到中间叉子,而其中一个被卡住了很长的测试,当它完成时在它之后运行其他较短的测试(可以在任何其他可用的分支中运行)。

TL;DR:当并行运行测试时,Gradle 似乎分配测试就好像有多个队列(每个叉一个),我希望它像一个队列,叉在队列中进行下一个测试。

举个跑题的例子,我的情况就像是在超市排队,旁边的人都是空的,但你无法改变。

是后者。 gradle 使用一个队列并将每个条目顺时针分配给正在运行的进程。 假设您有 4 个测试:

  • 测试 1 需要 10 秒
  • 测试 2 耗时 1 秒
  • 测试 3 需要 10 秒
  • Test4 耗时 1 秒

并且使用maxParallelForks = 2整个测试任务执行时间将在 20 maxParallelForks = 2左右。 我想我们需要讨论是否可以通过在 Test2 在 1 秒后返回后收到有关“免费”进程的通知以将 Test3 直接分配给测试工作进程 2 来改进这一点。

截至7月2021,你的问题(和我的经验)匹配中描述的问题这个问题,其“已被自动由于不活动而关闭”。

问题没有解决,是的,系统提前分配任务并且不会重新平衡以使用空闲的工人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM