You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Gradle中的多个Spock Test测试任务实现并行执行

问题原因

你之前添加的--parallel参数默认仅支持多项目构建的跨项目任务并行,单项目内的独立任务并行需要额外配置。同时你当前定义的两个Test任务共享默认的测试输出目录,Gradle检测到输出路径存在冲突也会禁止两个任务并行执行。

配置步骤

  1. 启用单项目任务并行开关
    在项目根目录的gradle.properties文件中添加以下2行配置:
# 开启全局并行执行
org.gradle.parallel=true
# 开启单项目内独立任务并行(Gradle 6.8及以上版本支持)
org.gradle.parallel.intra-project=true

如果不想修改配置文件,也可以在执行命令时直接附加对应参数:
./gradlew cleanTest test1 test2 --info --rerun-tasks --parallel --parallel-intra-project --max-workers=3

  1. 为两个测试任务配置独立的输出目录
    避免输出文件互相覆盖,Gradle只有确认任务之间没有输入输出冲突时才会调度并行执行,修改后的任务定义如下:
def failedTest = 0 // 提前声明你用到的failedTest变量,避免编译报错

task test1(type: Test) {
    ignoreFailures true
    testLogging {
        events 'started', 'passed', 'skipped', 'failed'
        exceptionFormat "full"
        showStandardStreams = true

        afterSuite { desc, result ->
            if (!desc.parent) { // 匹配最外层测试套件
                failedTest += result.failedTestCount
            }
        }
    }
    include "org/company/project/test/Test1.class"
    // 单独配置test1的输出目录
    reports.junitXml.outputLocation.set(layout.buildDirectory.dir("test-results/test1"))
    reports.html.outputLocation.set(layout.buildDirectory.dir("reports/tests/test1"))
    binResultsDir.set(layout.buildDirectory.dir("test-results/binary/test1"))
}

task test2(type: Test) {
    ignoreFailures true
    testLogging {
        events 'started', 'passed', 'skipped', 'failed'
        exceptionFormat "full"
        showStandardStreams = true

        afterSuite { desc, result ->
            if (!desc.parent) { // 匹配最外层测试套件
                failedTest += result.failedTestCount
            }
        }
    }
    include "org/company/project/test/Test2.class"
    // 单独配置test2的输出目录
    reports.junitXml.outputLocation.set(layout.buildDirectory.dir("test-results/test2"))
    reports.html.outputLocation.set(layout.buildDirectory.dir("reports/tests/test2"))
    binResultsDir.set(layout.buildDirectory.dir("test-results/binary/test2"))
}

验证方式

执行测试命令后查看运行日志,若test1未执行完成时就已经打印test2的测试启动日志,即说明并行配置生效。

内容的提问来源于stack exchange,提问作者Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:18:02