首页 > 解决方案 > Gradle 在同一台机器上为同一项目并行运行单元和集成测试

问题描述

我正在尝试减少使用 gradle 运行测试所需的时间。由于有多个项目,我能想到的一种方法是将测试拆分为单元测试和集成测试。对于每个项目,我创建了两个不同的任务:unitTests 任务和 integrationTests 任务。

假设为了简化,我们总是gradle build -x test在运行测试之前运行。在这种情况下,我试图说明我可以在哪里并行运行任务 unitTests 和 integrationTests。

目前我已经看到失败,其中一个任务开始编译项目导致另一个任务失败并出现错误:“无法读取 zip 文件”,这可能是因为项目所依赖的 JAR 现在正在由另一个进程更新。这似乎很可能是因为我们将 compileJava 和 compileTestJava 作为依赖任务,它们会干扰依赖项目导致失败。

想知道 gradle 中是否有办法执行以下操作:

  1. 只运行测试而不编译任何东西(在 maven 中为 surefire:test)。
  2. 如果没有,是否可以在 build.gradle 中指定设置来告诉 gradle 不要修改文件而只是运行测试。

标签: gradlecontinuous-integrationintegration-testinggradlew

解决方案


Gradle(尚)不支持并行运行同一项目的多个任务。但是,在运行测试时,这些可以在给定的测试任务中并行运行。

对于您在其他事情运行时可能由于文件被更改而出现错误的问题,请确保 Gradle 了解任务之间的所有依赖关系,因为这将是解决这些问题的最佳方法。

至于工作避免,Gradle 被优化为只做最低要求,包括任务更新检查、编译避免等等。因此,如果自上次执行以来发生了更改,调用test只会编译代码。


推荐阅读