junit 使用gradle运行并行测试任务

ykejflvf  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(257)

我们使用JUnit作为测试框架。我们有许多项目。我们使用gradle(版本1.12)作为构建工具。为了使用gradle并行运行单元测试,我们在每个项目的测试任务中使用以下脚本。

maxParallelForks = Runtime.runtime.availableProcessors()

例如:

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

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

xkrw2x1b

xkrw2x1b1#

上述可接受的答案有效,但此处的Gradle文档建议您使用

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

我尝试了这两种,并在测试后,都在2. 3 GHz英特尔酷睿i7 Mac Book Pro与16 GB内存(4核与超线程)

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

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

Gradle文档建议的方法为我们的单元测试套件带来了更快的响应时间:7分钟vs. 8分钟(相比原来的13分钟)。此外,我的Mac CPU没有得到挂钩和风扇没有启动。
我假设在共享资源上存在争用-即使它只是我们正在运行单元测试的机器。

lf3rwulv

lf3rwulv2#

$rootDir/build.gradle

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

8i9zcol23#

对于我们这些在build.gralde.kts中使用Kotlin的人来说,在谷歌搜索后发现自己在这里,我能够让它这样工作:

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
}
j2qf4p5b

j2qf4p5b4#

KotlinGradle DSL

tasks.withType<Test> {
      maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1).also {
        println("Setting maxParallelForks to $it")
      }
}

相关问题