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

如何在Groovy中重构代码实现测试任务批量串行+套件并行调度?

重构Groovy代码实现测试分组串行+套件并行

首先,我们需要先统一收集所有测试任务的执行逻辑,再按每3个一组进行分组,最终实现测试套件内部串行执行、套件之间并行运行的效果。重构后的代码如下:

// 1. 先收集所有单个测试的执行闭包
def allTestTasks = []
config.deploymentTargets.each { deploymentName ->
    config.deploymentTargetsMap[deploymentName][branchName].each { deploymentTargetName ->
        def testContext = "${stageName}.${deploymentTargetName}"
        // 将单个测试的执行逻辑存入列表
        allTestTasks.add({
            stage(testContext) {
                /* set up one test */
            }
        })
    }
}

// 2. 按每3个测试为一组拆分,不足3个的自动组成最后一组
def testSuites = allTestTasks.collate(3)

// 3. 为每个测试套件创建并行任务,套件内部串行执行测试
testSuites.eachWithIndex { suiteTasks, index ->
    def suiteName = "Test-Suite-${index + 1}"
    deployments[suiteName] = {
        stage(suiteName) {
            // 套件内逐个串行执行测试
            suiteTasks.each { task ->
                task()
            }
        }
    }
}

关键逻辑说明:

  • 收集测试任务:先遍历所有部署目标,把每个测试的执行逻辑统一存入列表,方便后续分组操作。
  • 自动分组:用Groovy自带的collate(3)方法,一键将测试列表按每3个元素分割成子列表,每个子列表对应一个测试套件;如果总测试数不是3的倍数,最后一组会自动包含剩余的1-2个测试。
  • 套件并行+内部串行:每个测试套件作为独立的并行单元存入deployments,套件内部通过each方法逐个串行执行测试任务,既控制了单批次并行数量,又保证了组内测试的串行顺序。

另外修正了原代码的笔误:将stage( textContext )改为stage(testContext),避免变量名错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:17:21