首页 文章

使用gradle运行并行测试任务

提问于
浏览
20

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

2 回答

  • 33

    $rootDir/build.gradle

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

    上面接受的答案有效,但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没有被钉住,风扇也没有启动 .

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

相关问题