【问题标题】:How to execute JUnit tests in parallel for a single test class in Gradle如何在 Gradle 中为单个测试类并行执行 JUnit 测试
【发布时间】:2015-04-05 09:02:15
【问题描述】:

我们有很多使用 Spring 的集成测试。我们不想为每个测试创建单独的 JVM 进程(maxParallelForks 选项),或者只在多模块项目中运行并行构建(--parallel)。

我们希望单个测试类像在 Maven 中一样使用 http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html 和并行选项并行执行测试

使用并行选项要记住的重要一点是: 并发发生在同一个 JVM 进程中。

是否可以在 Gradle 中实现?

【问题讨论】:

标签: java unit-testing testing gradle spring-test


【解决方案1】:

@MariuszS 的回答是最好的

Gradle 是没有 xml 的蚂蚁,也许这可以帮助你 ant.apache.org/manual/Tasks/parallel.html :)

这里描述了最接近的实现方式-https://discuss.gradle.org/t/how-to-use-ants-parallel-target/6720/5

task runAllTestsByGroups << {
      ant.parallel(threadsPerProcessor: 1) {
                    ant.junit (...) {
            // run test group 1
            ...
        }
          ant.junit(...) {
            // run test group 2
            ...
       }
         // run group 3, 4, 5 ...
    }
  }

【讨论】:

  • 我不知道其他答案如何获得更多 +1,因为它不能回答我的问题。这个做到了,因为我实际上像蚂蚁任务一样使用了某事来做到这一点。不记得那是什么了。
  • 如果您对下面的答案有强烈的感觉,您可以随时投反对票。由于 Gradle 不支持它,因此您正在解决使用 ant 的 parallel 任务运行测试,根据他们的文档,该任务不能保证是线程安全的。或发布将您带到您想去的地方的答案,以便我们都能学到一些东西。
  • 我已经更新了答案。希望人们不要再投反对票了。
【解决方案2】:

春季 5:街区的新孩子

从 Spring 5 开始,您可以并行运行 Junit 测试(使用 Spring TestContext Framework),我认为这就是您正在寻找的:在同一个 JVM 中同时执行。

更多信息请参见Baeldung's blog


原答案:

这里是Gradle doc 解释 Java 插件在 Gradle 中的任务,here is API doc 解释该插件的参数。

请仔细查看forkEverymaxParallelForks 参数。

设置这些应该让您有足够的控制权来实现并行测试执行。

这里是the SO answer 指向应该设置maxParallelForks 的值,以最大化加速。

【讨论】:

  • 谢谢你,我当然知道这两个 - 我正在寻找的实际上不是生成 JVM。我与 Gradle 开发人员交谈,他们说目前 Gradle 中不存在该功能。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多