J'essaie d'obtenir un rapport de couverture de test en utilisant Gradle Android plugin 0.10.2. Mais je ne parviens toujours pas à obtenir un rapport de couverture après avoir exécuté certains tests. (ConnectedAndroidTest).
le build.gradle de mon module principal 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 du gradle de construction du projet est:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.10.+'
}
}
Une fois que je lance un gradlew connectedAndroidTest
depuis le terminal, je peux trouver coverage-instrumented-classes
et code-coverage
dans le dossier build
. Mais je ne trouve pas le dossier coverage
dans le dossier reports
. (Je ne vois que le dossier androidTests
)
Y a-t-il quelque chose qui manque pour obtenir un rapport de couverture jacoco?
Au cours des centaines de fois où j'ai cherché la réponse pour obtenir un rapport de couverture, j'ai finalement trouvé la réponse exacte que je voulais.
D'après cet article de blog , j'ai trouvé que gradlew createDebugCoverageReport
crée le rapport de couverture jacoco.
De plus, à partir du plugin gradle code source , le plugin utilise par défaut jacoco 0.6.2.201302030002. (par conséquent, la définition de la version jacoco n'est pas requise si vous allez utiliser une version par défaut)
En résumé, les étapes [~ # ~] essentielles [~ # ~] pour obtenir un rapport de couverture jacoco
avec Android gradle est:
build.gradle
)testCoverageEnabled true
au type de construction que vous souhaitez (c'est-à-dire debug
)$ gradlew createDebugCoverageReport
ou gradlew connectedCheck
pour obtenir un rapport de couverture jacoco
.Vous pouvez trouver votre rapport de couverture sur le build/reports/coverage/{buildType}
. (c'est à dire. build/reports/coverage/debug
pour la version de débogage)
(Ajouter un cas multi-saveur à partir du commentaire de @ odiggity)
Si votre projet utilise une configuration à plusieurs saveurs, utilisez create{flavorName}CoverageReport
au lieu. Le rapport de couverture sera généré à build/reports/coverage/{flavorName}/{buildType}
.
Exemple pour la saveur krInternal avec debug type de build:
./gradlew createKrInternalDebugCoverageReport
build/reports/coverage/krInternal/debug
Comme 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 périphérique normal (non rooté):
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.
Script de construction Travis-CI pour obtenir la couverture du code
Inclure ce bloc dans build.gradle, pour tous les modules (bibliothèque, exemple, etc.)
Android {
lintOptions {
abortOnError false
}
}
Ci-dessous est le .travis-ci.yml
fichier
language: Android
jdk: oraclejdk8
Sudo: required
Android:
components:
# Uncomment the lines below if you want to
# use the latest revision of Android SDK Tools
- tools
- platform-tools
# The BuildTools version used by your project
- build-tools-28.0.3
# The SDK version used to compile your project
- Android-28
- Android-22
- add-on
# Additional components
- extra-google-google_play_services
- extra-Android-support
- extra-google-m2repository
- extra-Android-m2repository
# Specify at least one system image,
# if you need to run emulator(s) during your tests
- sys-img-armeabi-v7a-Android-22
licenses:
- 'Android-sdk-preview-license-52d11cd2'
- 'Android-sdk-license-.+'
- 'google-gdk-license-.+'
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
- $HOME/.Android/build-cache
before_install:
- yes | sdkmanager "build-tools;28.0.3"
before_script:
- echo no | Android create avd --force -n test -t Android-22 --abi armeabi-v7a -c 100M
- emulator -avd test -no-audio -no-window &
- Android-wait-for-emulator
- sleep 180
- adb devices
- adb Shell input keyevent 82 &
script:
- ./gradlew build connectedCheck
after_success:
- bash <(curl -s https://codecov.io/bash)
J'ai créé un plugin open source pour cela.
Racine build.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 et vous donnera ensuite la sortie Jacoco sous forme xml et html dans le répertoire de construction correspondant pour le type de construction de débogage.
Je dois ajouter une réponse au lieu d'un commentaire car ma réputation est inférieure à 50 ...
Ce que je veux compléter, c'est:
Google a publié de nouveaux outils de construction corrigeant le vilain problème "VerifyError" ( link ).
Veuillez essayer de modifier votre paramètre dans gradle pour utiliser les derniers outils de génération 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.
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 le build.gradle
de votre application.
Une façon de trouver le dernier numéro de version: recherchez "org.jacoco: jacoco" sur JCenter .
Gradle a déjà 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. Fondamentalement, la seule chose que nous devons faire est de définir le paramètre testCoverageEnabled
sur 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 /src/androidTest/Java/
répertoire. Après avoir exécuté 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 index.html
fichier, nous pouvons voir le rapport visuel de la couverture du test, qui peut être consulté dans un navigateur Web.
Il ressemble à l'image ci-dessous.
article sur le rapport de couverture des tests dans Android http://blog.wittchen.biz.pl/test-coverage-report-for-Android-application/