我们使用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文件中定义?
答案 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
}