Gradle 的 java 插件 运行 JUnit 如何并行测试:每个分支一个队列或一个队列和多个分支?

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 分钟对 4 分钟)。

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

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

举个题外话,我的情况就像在超市排队,旁边的都是空的,但你又不能换。

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

  • 测试 1 耗时 10 秒
  • Test2 耗时 1s
  • 测试 3 耗时 10 秒
  • Test4 耗时 1s

并使用 maxParallelForks = 2 总体测试任务执行时间约为 20 秒。我想我们需要讨论是否可以通过通知 "free" 进程在 Test2 在 1 秒后返回后将 Test3 直接分配给测试工作进程 2 来改进这一点。

截至 2021 年 7 月,您的问题(和我的经验)与 this issue 中描述的问题相符 “由于不活动已自动关闭”。

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