我有一些代码可以动态地并行调度一堆测试作业。看起来像
config.deploymentTargets.each { deploymentName ->
config.deploymentTargetsMap[deploymentName][branchName].each { deploymentTargetName ->
def testContext = "${stageName}.${deploymentTargetName}"
deployments[testContext] = {
stage( textContext ) {
/* set up one test */
}
}
}
}
在某些情况下,我们一次运行10-12个这样的测试,但是这样的测试的数量是动态的。我想改变这一点,使它们以三个“批”运行,因此测试1、2、3作为“测试套件1”连续运行,测试4、5、6作为“测试套件2”连续运行,等等。然后,不同的“测试套件”可以并行运行。我如何重新构造groovy代码来实现这一点?
1条答案
按热度按时间utugiqy61#
在修改后的代码中,我创建了一个
testSuites
数组来存储所有测试上下文。然后,我使用eachWithIndex
迭代testSuites
数组,并根据batchSize
值计算每个测试套件的批号。我创建了一个
parallelStages
Map来存储每个批处理的stage。如果一个批处理在parallelStages
Map中不存在,我会为它创建一个空Map。然后将测试套件作为键添加到相应的批处理中,并将阶段定义分配为其值。最后,在
node
块中,我有一个名为"Parallel Test Suites"
的阶段,其中使用并行步骤并传递parallelStages
Map,以根据定义的批次并行运行测试套件。通过这种重组,测试将在每个批处理中串行运行(一次三个),不同的测试套件将并行运行。
我试着修改你的代码: