使用gradle运行并行测试任务

时间:2014-05-22 11:45:24

标签: junit gradle build.gradle

我们使用Junit作为测试框架。我们有很多项目。我们使用gradle(版本1.12)作为构建工具。要使用gradle并行运行单元测试,我们在测试任务中的每个项目中使用波纹管脚本。

maxParallelForks = Runtime.runtime.availableProcessors()

例如:

 test {    
         maxParallelForks = Runtime.runtime.availableProcessors()       
    }

我们还维护单个gradle.properties文件。 是否可以在gradle.properties文件中定义 test.maxParallelForks = Runtime.runtime.availableProcessors(),而不是在测试任务下的每个build.gradle文件中定义?

3 个答案:

答案 0 :(得分:36)

$rootDir/build.gradle

subprojects {
    tasks.withType(Test) {
        maxParallelForks = Runtime.runtime.availableProcessors()
    }
}

答案 1 :(得分:28)

上面接受的答案有效,但Gradle文档here建议您使用

maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1

我试过这两款并且在2.3 GHz英特尔酷睿i7 Mac Book Pro上测试了16GB RAM(4核超线程)

test {
    maxParallelForks = Runtime.runtime.availableProcessors()
}

test {    
    maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1      
}

Gradle文档建议的方法为我们的单元测试套件提供了更快的响应时间:7分钟与8分钟(与原始的13分钟相比)。此外,我的Mac CPU没有被钉住,风扇也没有启动。

我假设在共享资源上存在争用 - 即使它只是我们运行单元测试的机器。

答案 2 :(得分:3)

对于那些在build.gralde.kts中使用Gradle Kotlin DSL的人来说,他们在Google搜索后发现自己在这里,我就可以使它以这种方式工作:

tasks.test {
    maxParallelForks = Runtime.getRuntime().availableProcessors()
}

tasks.withType<Test> {
        maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).takeIf { it > 0 } ?: 1
}

我发现here

编辑:我遇到了here所述的一些问题。 (希望如此)这是我的最终形式:

tasks.withType<Test> {
     systemProperties["junit.jupiter.execution.parallel.enabled"] = true
     systemProperties["junit.jupiter.execution.parallel.mode.default"] = "concurrent" 
     maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).takeIf { it > 0 } ?: 1
}