Подтвердить что ты не робот

Как получить отчет о покрытии 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 проекта build 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?

4b9b3361

Ответ 1

В течение сотен раз поиска ответа на получение отчета о покрытии, я, наконец, нашел точный ответ, что я хочу.

Из этого поста в блоге я узнал, что gradlew createDebugCoverageReport создает отчет о покрытии jacoco.

Кроме того, из исходного кода плагина Gradle плагин по умолчанию использует jacoco 0.6.2.201302030002. (следовательно, определение версии jacoco не требуется, если вы собираетесь использовать версию по умолчанию)

Таким образом, основные шаги для получения jacoco покрытии jacoco с плагином Android Gradle:

  1. Плагин Android Gradle версии 0.10.0 или выше (обычно в вашем проекте build.gradle)
  2. добавьте testCoverageEnabled true в тип сборки, который вы хотите (т.е. debug)
  3. запустите $ gradlew createDebugCoverageReport или gradlew connectedCheck чтобы получить jacoco покрытии jacoco.

Вы можете найти свой отчет о покрытии в build/reports/coverage/{buildType}. (т.е. build/reports/coverage/debug для отладочной сборки)

(Добавьте случай с несколькими вкусами из комментария @odiggity)

Если ваш проект использует конфигурацию с несколькими create{flavorName}CoverageReport, используйте вместо этого create{flavorName}CoverageReport. Отчет о покрытии будет сгенерирован в build/reports/coverage/{flavorName}/{buildType}.

Пример для аромата krInternal с отладочным типом сборки:

  • Команда: ./gradlew createKrInternalDebugCoverageReport
  • Отчет генерируется по адресу: build/reports/coverage/krInternal/debug

Совет:

Поскольку вы можете получить отчет о покрытии только с emulator и device with root permission, вы получите следующую ошибку после запуска команды на обычном (не 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.

Сценарий сборки Travis-CI для получения покрытия кода

Включить этот блок в build.gradle для всех модулей (библиотека, пример и т.д.)

android {
    lintOptions {
        abortOnError false
    }
}

Ниже .travis-ci.yml файл .travis-ci.yml

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)

Ответ 2

Я создал плагин с открытым исходным кодом для этого.

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 в соответствующем каталоге сборки для отладочного типа сборки.

Ответ 3

Нужно добавить ответ вместо комментария, так как моя репутация ниже 50...

Я хочу дополнить:

Google выпустил новые инструменты сборки, исправляющие неприятную проблему "VerifyError" ().

Попробуйте изменить настройки в gradle, чтобы использовать новейшие инструменты сборки, если вы столкнулись с проблемой VerifyError. Например,

android {
    ......
    buildToolsVersion '21.1.1'
    .....
}

Поскольку инструменты сборки 21.0.0 не работают, используйте версию более 21.0.0. Я использую 21.1.1.

Ответ 4

Если вы хотите использовать другую версию, чем по умолчанию, добавьте

jacoco {
    version = '0.7.3.201502191951'
}

внутри тега android в вашем приложении build.gradle.

Один из способов найти последний номер версии: поиск "org.jacoco: jacoco" на JCenter.

Ответ 5

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/