Как получить отчет о покрытии jacoco с помощью плагина Android gradle 0.10.0 или выше?
Я пытаюсь получить отчет о тестовом покрытии с помощью плагина Gradle Android 0.10.2. Но я все еще не могу получить отчет о покрытии после выполнения некоторых тестов. (ConnectedAndroidTest).
build.gradle моего основного модуля:
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.+'
}
и раздел buildscript сборки gradle проекта:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
Однажды я бегу gradlew connectedAndroidTest
из терминала я могу найти coverage-instrumented-classes
а также code-coverage
папка внутри build
папка. Но я не могу найти coverage
папка в reports
папка. (Только я вижу это androidTests
папка)
Чего-то не хватает для получения отчета о покрытии от Jacoco?
5 ответов
В течение сотен раз поиска ответа на получение отчета о покрытии, я, наконец, нашел точный ответ, что я хочу.
Из этого поста в блоге я обнаружил, что gradlew createDebugCoverageReport
создает отчет о покрытии jacoco
Кроме того, из исходного кода плагина Gradle плагин по умолчанию использует jacoco 0.6.2.201302030002. (следовательно, определение версии jacoco не требуется, если вы собираетесь использовать версию по умолчанию)
Таким образом, основные шаги, чтобы получить jacoco
Отчет о покрытии с плагином Android Gradle:
- Плагин Android Gradle версии 0.10.0 или выше (обычно в вашем проекте
build.gradle
) - добавлять
testCoverageEnabled true
к типу сборки, которую вы хотите (т.е.debug
) - бежать
$ gradlew createDebugCoverageReport
или жеgradlew connectedCheck
чтобы получитьjacoco
отчет о покрытии.
Вы можете найти свой отчет о покрытии на build/reports/coverage/{buildType}
, (т.е. build/reports/coverage/debug
для отладочной сборки)
(Добавьте случай с несколькими вкусами из комментария @odiggity)
Если ваш проект использует конфигурацию с несколькими вариантами, используйте create{flavorName}CoverageReport
вместо. Отчет о покрытии будет создан на build/reports/coverage/{flavorName}/{buildType}
,
Пример для аромата krInternal с отладочным типом сборки:
- Команда:
./gradlew createKrInternalDebugCoverageReport
- Отчет составлен по адресу:
build/reports/coverage/krInternal/debug
Совет:
Поскольку вы можете получить только отчет о покрытии с emulator
а также device with root permission
вы получите следующую ошибку после запуска команды на обычном (не рутированном) устройстве:
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.
Gradle уже имеет встроенную поддержку для генерации отчетов о тестовом покрытии, и нам не нужно создавать какие-либо дополнительные конфигурации или добавлять какие-либо плагины для генерации отчета о тестовом покрытии. По сути, единственное, что нам нужно сделать, это установить testCoverageEnabled
параметр для true
в build.gradle
файл следующим образом:
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
Далее мы можем выполнить следующую задачу Gradle из CLI:
./gradlew createDebugCoverageReport
В Windows мы можем выполнить это так:
gradlew.bat createDebugCoverageReport
Задача проанализирует код нашего проекта в /src/main/java/
каталог и модульные тесты размещены в /src/androidTest/java/
каталог. После выполнения этой задачи мы можем найти отчет о покрытии теста в следующем каталоге модуля:
/build/outputs/reports/coverage/debug/
Когда мы открываем index.html
В файле мы можем увидеть визуальный отчет из тестового покрытия, который можно посмотреть в веб-браузере.
Это выглядит как на картинке ниже.
статья об отчете по тестированию в приложении Android http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/
Я создал плагин с открытым исходным кодом для этого.
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'
}
}
Тогда просто выполните
./gradlew jacocoTestReportDebug // or jacocoTestReportRelease
Он запустит тесты JUnit, а затем выдаст вывод Jacoco в форме xml и html в соответствующем каталоге сборки для отладочного типа сборки.
Нужно добавить ответ вместо комментария, так как моя репутация ниже 50...
Что я хочу дополнить это:
Google выпустил новые инструменты сборки, исправляющие неприятную проблему "VerifyError" ( ссылка).
Пожалуйста, попробуйте изменить настройки Gradle, чтобы использовать новейшие инструменты сборки, если вы столкнулись с проблемой "VerifyError". Например,
android {
......
buildToolsVersion '21.1.1'
.....
}
Поскольку инструменты сборки 21.0.0 содержат ошибки, пожалуйста, используйте версию больше, чем 21.0.0. Я использую 21.1.1.
Если вы хотите использовать версию, отличную от версии по умолчанию, добавьте
jacoco {
version = '0.7.3.201502191951'
}
внутри android
тег в вашем приложении build.gradle
,
Один из способов найти номер последней версии: выполнить поиск "org.jacoco:jacoco" в JCenter.