web-dev-qa-db-ja.com

gradleを使用して並列テストタスクを実行する

テストフレームワークとしてJunitを使用します。多くのプロジェクトがあります。 gradle(Version 1.12)をビルドツールとして使用します。 gradleを使用して単体テストを並行して実行するには、テストタスクのすべてのプロジェクトで以下のスクリプトを使用します。

maxParallelForks = Runtime.runtime.availableProcessors()

例:

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

単一のgradle.propertiesファイルも維持します。 test.maxParallelForks = Runtime.runtime.availableProcessors()を、テストタスクの各build.gradleファイルで定義するのではなく、gradle.propertiesファイルで定義することは可能ですか?

26
Java-Seekar

$rootDir/build.gradle

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

上記の受け入れられた答えは動作しますが、Gradleのドキュメント here を使用することをお勧めします

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

私は両方を試し、16GBの2.3 GHz Intel Core i7 Mac Book Proで両方をテストした後、RAM(ハイパースレッディングを備えた4つのコア)

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

そして

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

Gradleのドキュメントで提案されているアプローチにより、ユニットテストスイートの応答時間が短縮されました:7分対8分(元の13分と比較して)。さらに、私のMac CPUは固定されず、ファンはキックオフしませんでした。

共有リソースで競合が発生していると仮定します-単体テストを実行しているのがマシン1つだけであっても。

34
kellyfj