Android Gradle eklentisi (AGP), cihaz üzerinde kapsam aracısı ile enstrümantasyon testleriniz için kod kapsamı raporları oluşturabilir. AGP, varsayılan olarak uygulamanızı derlerken uygulamanızın sınıflarını JaCoCo ile donatır. Bu, testlerinizin uygulamanızın hangi bölümlerini çalıştırdığını kaydeden kod eklediği anlamına gelir. Cihaz üzerinde kapsam aracısı sayesinde AGP, uygulamanızı bu ek kod olmadan derler ve testleriniz çalışırken uygulamanızın sınıflarını test cihazında araçlarla donatır. Bu sayfada, cihaz üzerinde kod kapsamının nasıl etkinleştirileceği ve raporların nasıl oluşturulacağı açıklanmaktadır.
Derleme zamanı kod kapsamıyla karşılaştırıldığında, cihaz üzerinde kod kapsamı aşağıdaki avantajları sunar:
- Daha hızlı derlemeler: AGP, uygulamanızın sınıflarında ve bağımlılıklarında JaCoCo araçlandırma adımını çalıştırmaz. Bu da derleme sürelerini %10-20 oranında azaltabilir.
- Daha küçük hata ayıklama APK'ları: AGP, uygulamanızın sınıflarına kapsam izleme kodu eklemez. Bu sayede hata ayıklama APK'nız% 20-25 daha küçük olabilir.
- Raporlarda kullanılmayan oluşturulmuş sınıflar yok: Testlerinizin kullanmadığı oluşturulmuş sınıflar, kapsam sayılarınızı düşürmez.
Gerçek derleme süresi ve APK boyutu iyileştirmeleri projenize bağlıdır.
Ön koşullar
Cihaz üzerinde kod kapsamını kullanmak için projenizin ve test cihazlarınızın aşağıdaki koşulları karşıladığından emin olun:
- AGP 9.6.0-alpha01 veya sonraki sürümler
- Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran bir cihaz ya da emülatör.
- Test ettiğiniz varyant için hata ayıklanabilir bir derleme türü (ör. varsayılan
debugderleme türü). Temsilci yalnızca hata ayıklanabilir uygulamalara bağlanabilir. AndroidJUnitRunnerveya bunu genişleten özel bir test çalıştırıcı ile çalışan araçlı testler.
Cihaz üzerinde kod kapsamını etkinleştirme
Cihaz üzerinde kod kapsamı, derleme zamanı kod kapsamıyla aynı enableAndroidTestCoverage özelliğini kullanır. Kapsam raporu almak istediğiniz her varyant için modül düzeyindeki derleme dosyalarında enableAndroidTestCoverage değerini true olarak ayarlayın:
Kotlin
android {
// ...
buildTypes {
debug {
// Enable coverage for instrumentation tests
enableAndroidTestCoverage = true
}
}
}
Modern
android {
// ...
buildTypes {
debug {
// Enable coverage for instrumentation tests
enableAndroidTestCoverage true
}
}
}
Ardından, projenizin gradle.properties dosyasında cihaz üzerinde kapsam aracısını ve rapor toplama özelliğini etkinleştirin:
android.experimental.androidTest.coverage.useOnDeviceAgent=true
android.experimental.reportAggregationSupport=true
Cihaz üzerinde kod kapsamı, HTML raporunu birleştirilmiş kod kapsamı raporlarıyla aynı oluşturucuyla oluşturur. Bu nedenle her iki özelliği de gerektirir.
Cihaz üzerinde kod kapsamı raporları oluşturma
Araçlı testlerinizi çalıştırmak ve kapsam raporları oluşturmak için bir cihaz bağlayın veya emülatör başlatın, ardından aşağıdaki görevi çalıştırın:
| Kapsam | Komut | Rapor konumu |
|---|---|---|
| Bir varyant | ./gradlew :module-name:createVariantNameAndroidTestCoverageReport |
path-to-your-project/module-name/build/reports/coverage/androidTest/variant/connected/index.html |
Derleme zamanı kod kapsamından farklar
Cihaz üzerinde ve derleme zamanı kapsam raporları, aynı testler için farklı sonuçlar gösterebilir. İki raporu karşılaştırırken veya kapsam eşiklerini birinden diğerine taşırken aşağıdaki farkları göz önünde bulundurun:
| Alan | Derleme zamanı kod kapsamı | Cihaz üzerinde kod kapsamı |
|---|---|---|
| Sınıflar ne zaman izlenir? | AGP, JaCoCo kullanarak uygulamanızı derlediğinde | Testleriniz çalışırken test cihazında, kapsam aracısını kullanarak |
| Rapordaki sınıflar | Modülünüzdeki tüm sınıflar | Yalnızca testleriniz çalışırken yüklenen modülünüzün ad alanındaki sınıflar. Bu sayede kapsam yüzdeleri daha yüksek olabilir. |
| Instruction counts | Java bayt kodu talimatları | DEX bayt kodu talimatları |
| Dal sayıları | Java bayt kodundaki dallar | DEX bayt kodundaki dallar. D8, koşulları farklı dallarda derleyebilir ve her araç, derleyici tarafından oluşturulan farklı dalları dışarıda bırakır. Bu nedenle sayılar farklı olabilir. |
| Sayaçlar | Talimatlar, dallar, satırlar, karmaşıklık, yöntemler ve sınıflar | Talimatlar, dallar, satırlar, yöntemler ve sınıflar. Karmaşıklık sayaçları henüz desteklenmiyor. |
| Test cihazları | Uygulamanızın desteklediği tüm API düzeyleri | Android 9 (API düzeyi 28) ve sonraki sürümler |
| Ham kapsam verileri | .ec dosya |
coverage_metadata.pb ve coverage_hits.pb dosya |
Derleme zamanı kod kapsamına geri dönmek için android.experimental.androidTest.coverage.useOnDeviceAgent=false özelliğini ayarlayın veya kaldırın. Derleme dosyalarınızı veya çalıştırdığınız görevleri değiştirmeniz gerekmez.
Bilinen sorunlar
Cihaz üzerinde kod kapsamıyla ilgili bilinen sorunlar şunlardır:
- Yüklenmeyen sınıflar: Testleriniz çalışırken hiç yüklenmeyen sınıflar raporda görünmez. Derleme zamanı kod kapsamı raporları, bunları% 0 kapsamla listeler.
- Birleştirilmiş raporlar: Projeniz, birim testleri gibi ana makine testlerinden de kapsam topluyorsa
testAllSuitesvetestAllSuitesWithDependenciesgörevlerinin oluşturduğu birleştirilmiş kapsam raporu, bu testlerdeki Java bayt kodu sayılarını aracıdaki DEX bayt kodu sayılarıyla birleştirir. İkisi arasındaki farklar nedeniyle, birleştirilmiş talimat ve dal sayıları, derleme zamanı kod kapsamı raporlarındaki sayılardan farklı olabilir.
Diğer geri bildirimleri ve sorunları Issue Tracker üzerinden bildirin.