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?

Author: Taeho Kim, 2014-05-22

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:

  1. wersja wtyczki Android gradle 0.10.0 lub wyższe (zazwyczaj w projekcie build.gradle)
  2. dodaj testCoverageEnabled true do żądanego typu budowania (np. debug)
  3. Uruchom $ gradlew createDebugCoverageReport lub gradlew 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.
 96
Author: Taeho Kim,
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.

 6
Author: Better Shao,
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.

 6
Author: Niklas,
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 .

 3
Author: nhaarman,
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.

Tutaj wpisz opis obrazka

Artykuł o raporcie z testów w aplikacji na Androida http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/

 2
Author: Yuliia Ashomok,
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