web-dev-qa-db-fra.com

Exécuter une tâche de test parallèle à l'aide de Gradle

Nous utilisons Junit comme cadre de test. Nous avons de nombreux projets. Nous utilisons gradle (Version 1.12) comme outil de construction. Pour exécuter le test unitaire parallèlement à l'aide de gradle, nous utilisons le script ci-dessous dans tous les projets sous tâche de test.

maxParallelForks = Runtime.runtime.availableProcessors()

Ex:

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

Nous conservons également le fichier gradle.properties unique. Est-il possible de définir test.maxParallelForks = Runtime.runtime.availableProcessors () dans le fichier gradle.properties plutôt que de définir dans chaque fichier build.gradle sous la tâche de test?

26
Java-Seekar

$rootDir/build.gradle:

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

La réponse acceptée ci-dessus fonctionne mais la documentation Gradle ici vous suggère d'utiliser

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

J'ai essayé les deux et après avoir testé les deux sur un Mac Core Pro Intel Core i7 à 2,3 GHz avec 16 Go RAM (4 cœurs avec hyperthreading)

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

et

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

L'approche suggérée par la documentation Gradle a produit des temps de réponse plus rapides pour notre suite de tests unitaires: 7 minutes contre 8 minutes (par rapport aux 13 minutes d'origine). De plus, mon processeur Mac n'a pas été arrimé et le ventilateur n'a pas démarré.

Je suppose qu'il y a conflit sur une ressource partagée - même si ce n'est que celle de la machine sur laquelle nous exécutons les tests unitaires.

34
kellyfj