Comment puis-je obtenir un rapport de couverture jacoco en utilisant Android gradle plugin 0.10.0 ou supérieur?
J'essaie d'obtenir un rapport de couverture de test en utilisant Gradle Android plugin 0.10.2. Mais je ne peux toujours pas obtenir un rapport de couverture après avoir effectué quelques tests. (connectedAndroidTest).
La construction de mon module principal.gradle est :
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
testCoverageEnabled true
}
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
}
Et la section buildscript de la gradle de construction du projet est:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
Une fois que j'ai exécuté un gradlew connectedAndroidTest
à partir du terminal, je peux trouver le dossier coverage-instrumented-classes
et code-coverage
dans le dossier build
. Mais je ne trouve pas le dossier coverage
dans le dossier reports
. (Seulement je peux voir est androidTests
dossier)
Y a-t-il quelque chose qui manque pour obtenir un rapport de couverture jacoco?
5 réponses
Au cours des centaines de fois en cherchant la réponse pour obtenir un rapport de couverture, j'ai finalement trouvé une réponse exacte ce que je veux.
À partir du Cet article de blog , j'ai trouvé que gradlew createDebugCoverageReport
crée le rapport de couverture jacoco.
Aussi, à partir du plugin gradle code source, le plugin utilise jacoco 0.6.2.201302030002 par défaut. (par conséquent, La définition de la version jacoco n'est pas requise Si vous utilisez une version par défaut)
En résumé, le étapes essentielles pour obtenir un rapport de couverture jacoco
avec le plugin Android gradle sont:
- version du plugin Android gradle0.10.0 ou supérieur (généralement dans
build.gradle
de votre projet) - ajouter
testCoverageEnabled true
pour le type de construction que vous voulez (c'est à diredebug
) - exécuter
$ gradlew createDebugCoverageReport
ougradlew connectedCheck
pour obtenir unjacoco
rapport de couverture.
Vous pouvez trouver votre rapport de couverture sur le build/reports/coverage/{buildType}
. (c'est-à-dire build/reports/coverage/debug
pour la construction de débogage)
(ajouter Cas Multi-saveur de @ odiggity commentaire)
Si votre projet utilise une configuration multi-saveur, utilisez create{flavorName}CoverageReport
à la place. Le rapport de couverture sera généré à build/reports/coverage/{flavorName}/{buildType}
.
Exemple pour la saveur krInternal avec debug type de construction:
- Commande:
./gradlew createKrInternalDebugCoverageReport
- le rapport est généré à:
build/reports/coverage/krInternal/debug
Astuce :
Puisque vous ne pouvez obtenir un rapport de couverture qu'avec les emulator
et device with root permission
, Vous obtiendrez l'erreur suivante après avoir exécuté une commande sur le dispositif régulier (non enraciné):
05:48:33 E/Device: Error during Sync: Permission denied
java.io.IOException: com.android.ddmlib.SyncException: Permission denied
at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:114)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:158)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:42)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)
Caused by: com.android.ddmlib.SyncException: Permission denied
at com.android.ddmlib.SyncService.doPullFile(SyncService.java:511)
at com.android.ddmlib.SyncService.pullFile(SyncService.java:320)
at com.android.ddmlib.Device.pullFile(Device.java:849)
at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:107)
... 10 more
:myDirections:connectedAndroidTest FAILED
FAILURE: Build failed with an exception.
Je dois ajouter une réponse au lieu d'un commentaire puisque ma réputation est inférieure à 50...
Ce que je veux compléter est:
Google a publié de nouveaux outils de construction corrigeant le méchant problème" VerifyError " (link).
Essayez de modifier vos paramètres dans gradle pour utiliser les derniers outils de construction si vous rencontrez le problème "VerifyError". Par exemple,
android {
......
buildToolsVersion '21.1.1'
.....
}
Étant donné que les outils de construction 21.0.0 sont bogués, veuillez utiliser une version supérieure à 21.0.0. J'utilise 21.1.1.
J'ai créé un plugin open source pour cela.
Construction racine.gradle
apply plugin: "com.vanniktech.android.junit.jacoco"
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.3.0'
}
}
Ensuite, exécutez simplement
./gradlew jacocoTestReportDebug // or jacocoTestReportRelease
Il exécutera les tests JUnit, puis vous donnera la sortie Jacoco sous forme xml et html dans le répertoire de construction correspondant pour le type de construction de débogage.
Si vous souhaitez utiliser une version différente de la version par défaut, ajoutez
jacoco {
version = '0.7.3.201502191951'
}
À l'intérieur de la balise android
dans build.gradle
de votre application.
Une façon de trouver le dernier numéro de version: rechercher " org.jacoco: jacoco " sur JCenter .
Gradle dispose déjà d'un support intégré pour générer des rapports de couverture de test et nous n'avons pas besoin de créer de configurations supplémentaires ou d'ajouter des plugins pour générer un rapport de couverture de test. En gros, la seule chose que nous devons faire, est de testCoverageEnabled
paramètre true
dans build.gradle
fichier comme suit:
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
Ensuite, nous pouvons exécuter la tâche Gradle suivante à partir de CLI:
./gradlew createDebugCoverageReport
Sous Windows, nous pouvons l'exécuter comme ceci:
gradlew.bat createDebugCoverageReport
La tâche analysera le code de notre projet dans /src/main/java/
répertoire et tests unitaires placés dans le répertoire /src/androidTest/java/
.
Après l'exécution de cette tâche, nous pouvons trouver le rapport de couverture de test dans le répertoire suivant du module:
/build/outputs/reports/coverage/debug/
Lorsque nous ouvrons le fichier index.html
, nous pouvons voir le rapport visuel de la couverture de test, qui peut être consulté dans un navigateur web.
Il ressemble à l'image ci-dessous.
Article sur le rapport de couverture de test dans L'application Android http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/