Jak uzyskać raport pokrycia jacoco za pomocą wtyczki Android gradle 0.10.0 lub wyższej?
Próbuję uzyskać raport z testów za pomocą wtyczki Gradle Android 0.10.2. Ale nadal nie mogę uzyskać raportu po przeprowadzeniu kilku testów. (connectedAndroidTest).
Mój główny moduł jest zbudowany.gradle to:
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.+'
}
I sekcja buildscript w gradle projektu to:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
Po uruchomieniu gradlew connectedAndroidTest
z terminala, mogę znaleźć coverage-instrumented-classes
i code-coverage
folder w folderze build
. Ale nie mogę znaleźć coverage
folderu w reports
folderze. (Only I can see is androidTests
folder)
Czy brakuje czegoś do uzyskania raportu jacoco?
5 answers
Przez setki razy szukając odpowiedzi, aby uzyskać raport pokrycia, w końcu znalazłem dokładną odpowiedź, czego chcę.
Z tego posta na blogu odkryłem, że gradlew createDebugCoverageReport
tworzy raport jacoco coverage.
Ponadto, z kodu źródłowego wtyczki gradle , wtyczka domyślnie używa jacoco 0.6.2.201302030002. jeśli chcesz użyć wersji domyślnej, nie jest wymagana definicja wersji jacoco.]}
Podsumowując, niezbędne kroki, aby uzyskać jacoco
raport pokrycia z Androidem Gradle plugin to:
- wersja wtyczki Android gradle 0.10.0 lub wyższe (zazwyczaj w projekcie
build.gradle
) - dodaj
testCoverageEnabled true
do żądanego typu budowania (np.debug
) - Uruchom
$ gradlew createDebugCoverageReport
lubgradlew connectedCheck
, aby uzyskaćjacoco
raport pokrycia.
Możesz znaleźć raport z relacji na build/reports/coverage/{buildType}
. (np. build/reports/coverage/debug
dla debug build)
(Dodaj Etui multi-flavor od @odiggity ' s komentarz)
Jeśli twój projekt używa konfiguracji multi-flavor, użyj create{flavorName}CoverageReport
. Raport pokrycia zostanie wygenerowany pod adresem build/reports/coverage/{flavorName}/{buildType}
.
Przykład dla flavor krInternal with debug build type:
- Komenda:
./gradlew createKrInternalDebugCoverageReport
- raport znajduje się na stronie:
build/reports/coverage/krInternal/debug
Porada:
Ponieważ możesz uzyskać raport pokrycia tylko za pomocą emulator
i device with root permission
, otrzymasz następujący błąd po uruchomieniu polecenia na urządzenie zwykłe (niekorzenione):
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-17 00:57:06
Muszę dodać odpowiedź zamiast komentarza, ponieważ moja reputacja jest niższa niż 50...
Chcę uzupełnić:
Google wydało nowe narzędzia do budowania naprawiające paskudny problem "verifyerror" (link ).
Spróbuj zmienić swoje ustawienia w gradle, aby używać najnowszych narzędzi do budowania, jeśli napotkasz problem "VerifyError". Na przykład,
android {
......
buildToolsVersion '21.1.1'
.....
}
Ponieważ narzędzia do budowania 21.0.0 są wadliwe, należy użyć wersji większej niż 21.0.0. Używam 21.1.1.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-14 02:56:11
Stworzyłem wtyczkę open source.
Root build.gradle
apply plugin: "com.vanniktech.android.junit.jacoco"
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.3.0'
}
}
Następnie po prostu wykonaj
./gradlew jacocoTestReportDebug // or jacocoTestReportRelease
Uruchamia testy JUnit, a następnie daje wyjście Jacoco w postaci xml i html w odpowiednim katalogu budowania dla typu debug build.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 09:09:50
Jeśli chcesz użyć innej wersji niż domyślna, dodaj
jacoco {
version = '0.7.3.201502191951'
}
Wewnątrz znacznika android
w aplikacji build.gradle
.
Jeden sposób, aby znaleźć najnowszy numer wersji: wyszukaj " org.jacoco: jacoco " na JCenter .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 01:56:04
Gradle ma już wbudowaną obsługę generowania raportów pokrycia testów i nie musimy tworzyć żadnych dodatkowych konfiguracji ani dodawać żadnych wtyczek do generowania raportu pokrycia testów. Zasadniczo jedyne, co musimy zrobić, to ustawić parametr testCoverageEnabled
na true
w pliku build.gradle
w następujący sposób:
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
Następnie możemy wykonać następujące zadanie Gradle z CLI:
./gradlew createDebugCoverageReport
W systemie Windows możemy wykonać go w następujący sposób:
gradlew.bat createDebugCoverageReport
Zadanie przeanalizuje Kod naszego projektu w /src/main/java/
katalog i testy jednostkowe umieszczone w katalogu /src/androidTest/java/
.
Po wykonaniu tego zadania, możemy znaleźć raport pokrycia testu w następującym katalogu modułu:
/build/outputs/reports/coverage/debug/
Kiedy otwieramy plik index.html
, możemy zobaczyć wizualny raport z testu, który można przeglądać w przeglądarce internetowej.
Wygląda jak na poniższym obrazku.
Artykuł o raporcie z testów w aplikacji na Androida http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 18:51:49