Komut satırından test etme

Bu dokümanda, testlerin doğrudan komut satırından nasıl çalıştırılacağı açıklanmaktadır. Bu belgede, Android uygulaması oluşturmayı ve uygulamanız için testler yazmayı zaten bildiğiniz varsayılmaktadır. Uygulamanız için test oluşturma hakkında daha fazla bilgi edinmek için Android'de uygulamaları test etme bölümüne bakın.

Android Gradle eklentisi, Gradle derleme sistemini kullanarak uygulamanızı derlediğinizde komut satırını kullanarak Gradle projenizden testler çalıştırmanızı sağlar. Daha ayrıntılı denetim için testlerinizi Android Debug Bridge (adb) kabuğu üzerinden çalıştırmayı seçebilirsiniz. Bu, sürekli entegrasyon ortamında testler çalıştırırken yararlı olabilir.

Gradle'ın sizin için yönettiği sanal cihazları kullanarak komut satırından otomatik araçlı testlerin nasıl çalıştırılacağını öğrenmek için Gradle Yönetilen Cihazlar ile testlerinizi ölçeklendirme bölümüne bakın.

Gradle ile test yapın

Android Gradle eklentisi, komut satırını kullanarak Gradle projenizden testler çalıştırmanızı sağlar.

Aşağıdaki tabloda, testlerinizi Gradle ile nasıl çalıştıracağınız özetlenmektedir:

Tablo 1. Gradle ile testlerinizi yapmanın farklı yolları

Birim testi türü Çalıştırma komutu Test sonucu konumu
Yerel birim testi test görevini çalıştırın:

./gradlew test
HTML test sonucu dosyaları:
path_to_your_project/module_name/build/reports/tests/ dizin.

XML test sonucu dosyaları:
path_to_your_project/module_name/build/test-results/ dizin.

Araçlı birim testi connectedAndroidTest görevini çalıştırın:

./gradlew connectedAndroidTest
HTML test sonucu dosyaları:
path_to_your_project/module_name/build/reports/androidTests/connected/ dizin.

XML test sonucu dosyaları:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ dizin.

Gradle, görev adı kısaltmalarını destekler. Örneğin, aşağıdaki komutu girerek connectedAndroidTest görevini başlatabilirsiniz:

./gradlew cAT

Ayrıca, check ve connectedCheck Gradle görevlerini çalıştırmayı da seçebilirsiniz. Bu görevler, sırasıyla yerel veya araçlı testlerinizi çalıştırır ancak diğer Gradle eklentileri tarafından eklenen diğer kontrolleri içerir.

Modül üzerinde test çalıştırma

test ve connectedAndroidTest görevleri, projenizdeki her modülde test çalıştırır. test veya connectedAndroidTest görevinin önüne modül adı ve iki nokta (:) ekleyerek belirli bir modülde test çalıştırabilirsiniz. Örneğin, aşağıdaki komut yalnızca mylibrary modülü için izlemeli testler çalıştırır:

./gradlew mylibrary:connectedAndroidTest

Derleme varyantı üzerinde test çalıştırma

test ve connectedAndroidTest görevleri, projenizdeki her oluşturma varyantı üzerinde testler çalıştırır. Aşağıdaki söz dizimini kullanarak belirli bir derleme varyantını hedefleyebilirsiniz:

  • Yerel birim testleri için:
    ./gradlew testVariantNameUnitTest
  • Araçlı testler için:
    ./gradlew connectedVariantNameAndroidTest

Belirli test yöntemlerini veya sınıfları çalıştırma

Yerel birim testleri çalıştırırken Gradle, --tests işaretini kullanarak belirli testleri hedeflemenize olanak tanır. Örneğin, aşağıdaki komut yalnızca belirtilen derleme varyantı için sampleTestMethod testlerini çalıştırır. --tests işaretini kullanma hakkında daha fazla bilgi için Gradle'ın test filtreleme ile ilgili belgelerini okuyun.


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

Araçlı testler için çok modüllü raporlar

Tablo 1'de açıklandığı gibi Gradle, test edilen her modülün build/ dizinine araçlı test sonuçlarını kaydeder. Ancak, birden fazla modülde test çalıştırırken tüm test sonuçlarını tek bir raporda birleştirmek yararlı olabilir. Birden çok modülde test çalıştırırken tek bir rapor oluşturmak için aşağıdaki adımları izleyin:

  1. Proje düzeyindeki build.gradle dosyanıza, buildscript{} blokundan sonra aşağıdakileri ekleyin:

    Modern

    apply plugin: 'android-reporting'
    

    Kotlin

    apply(plugin = "android-reporting")
    
  2. mergeAndroidReports göreviyle test veya connectedAndroidTest görevini çağırın. Örneğin:

    ./gradlew connectedAndroidTest mergeAndroidReports
    

    Test hatalarını atlamak ve Gradle'ın kalan tüm testleri çalıştırmayı bitirmesi için --continue seçeneğini ekleyin:

    ./gradlew connectedAndroidTest mergeAndroidReports --continue
    

Gradle testlerinizi çalıştırmayı bitirdiğinde, birleştirilmiş sonuçları path_to_your_project/build/ dizinine kaydeder.

Adb ile test yapma

Android Debug Bridge (adb) kullanarak komut satırından test çalıştırdığınızda, çalıştırılacak testleri seçmek için diğer yöntemlere kıyasla daha fazla seçenek sunulur. Test yöntemlerini tek tek seçebilir, testleri özel bir ek açıklamaya göre filtreleyebilir veya test seçenekleri belirleyebilirsiniz. Test çalıştırması tamamen komut satırından kontrol edildiğinden, testinizi kabuk komut dosyalarıyla çeşitli şekillerde özelleştirebilirsiniz.

Komut satırından test çalıştırmak için adb shell komutunu çalıştırarak cihazınızda veya emülatörünüzde bir komut satırı kabuğu başlatın. Bu kabuk içinde am komutunu kullanarak etkinlik yöneticisi ile etkileşimde bulunabilir ve testlerinizi çalıştırmak için instrument alt komutunu kullanabilirsiniz.

Kısayol olarak bir adb kabuğu başlatabilir, am instrument yöntemini çağırabilir ve komut satırı işaretlerini tek bir giriş satırında belirtebilirsiniz. Kabuk, cihazda veya emülatörde açılır, testlerinizi çalıştırır, çıkış üretir ve ardından bilgisayarınızda komut satırına döner.

am instrument ile test yapmak için:

  1. Ana uygulamanızı ve test paketinizi derleyin veya yeniden oluşturun.
  2. Test paketinizi ve ana uygulama Android paketi dosyalarınızı (APK dosyaları) mevcut Android cihazınıza veya emülatörünüze yükleyin.
  3. Komut satırına şu komutu girin:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    Burada <test_package_name>, test uygulamanızın Android paket adıdır ve <runner_class>, kullandığınız Android test çalıştırıcı sınıfının adıdır. Android paket adı, test paketinizin manifest dosyasındaki (AndroidManifest.xml) manifest öğesinin paket özelliğinin değeridir.

    Android test çalıştırıcı sınıfı genellikle AndroidJUnitRunner şeklindedir:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

Test sonuçlarınız STDOUT içinde gösterilecek.

am enstrüman bayrakları

am instrument komutuyla kullanılacak tüm işaretlerin listesini bulmak için adb shell am help komutunu çalıştırın. Bazı önemli işaretler aşağıdaki tabloda açıklanmıştır:

Tablo 2. Önemli am instrument işaretleri

İşaretle Değer Açıklama
-w (yok) am instrument ürününün, kendisini sonlandırmadan önce araçlar sona erene kadar beklemesini zorunlu kılar. Bu işlem, testler tamamlanana kadar kabuk açık tutar. Testlerinizin sonuçlarını görmek için bu işaret gereklidir.
-r (yok) Sonuçları ham biçimde çıkarır. Test sonucu olarak biçimlendirilmemeleri için performans ölçümlerini toplamak istediğinizde bu işareti kullanın. Bu işaret, -e perf true işareti (am instrument seçenekleri bölümünde belirtilmiştir) ile kullanılmak üzere tasarlanmıştır.
-e <test_options> Anahtar/değer çiftleri olarak test seçenekleri sağlar. am instrument aracı, bunları onCreate() yöntemini kullanarak belirtilen araç sınıfına iletir. -e <test_options> için birden fazla durum belirtebilirsiniz. Anahtarlar ve değerler, am instrument seçenekleri bölümünde açıklanmıştır. Bu anahtar/değer çiftlerini yalnızca AndroidJUnitRunner veya InstrumentationTestRunner ve alt sınıflarıyla kullanabilirsiniz. Bunların başka sınıflarla kullanımının herhangi bir etkisi yoktur.
--no-hidden-api-checks (yok) Gizli API'lerin kullanımıyla ilgili kısıtlamaları devre dışı bırakır. Gizli API'lerin ne olduğu ve bunun uygulamanızı nasıl etkileyebileceği hakkında daha fazla bilgi için SDK dışı arayüzlerdeki kısıtlamalar başlıklı makaleyi okuyun.

öy enstrüman seçenekleri

am instrument aracı, test seçeneklerini AndroidJUnitRunner veya InstrumentationTestRunner öğesine şu söz dizimiyle -e işaretini kullanarak anahtar/değer çiftleri biçiminde geçirir:

-e <key> <value>

Bazı anahtarlar birden çok değer kabul eder. Virgülle ayrılmış bir listede birden çok değer belirtirsiniz. Örneğin, bu AndroidJUnitRunner çağrısı, package anahtarı için birden fazla değer sağlar:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

Aşağıdaki tabloda, test çalıştırıcınızla kullanabileceğiniz anahtar/değer çiftleri listelenmiştir:

Tablo 3. -e test çalıştırıcınızla kullanılacak anahtar/değer çiftlerini işaretleyecek şekilde,

Anahtar Değer Açıklama
package <Java_package_name> Test uygulamasındaki paketlerden birinin tam nitelikli Java paket adı. Bu paket adını kullanan tüm test durumu sınıfları yürütülür. Bunun bir Android paket adı olmadığına dikkat edin. Bir test paketinin tek bir Android paket adı vardır ancak içinde birkaç Java paketi bulunabilir.
class <class_name> Test durumu sınıflarından biri için tam nitelikli Java sınıfı adı. Yalnızca bu test durumu sınıfı yürütülür.
<class_name>#method name Tam nitelikli bir test durumu sınıfı adı ve yöntemlerinden biri. Yalnızca bu yöntem yürütülür. Sınıf adı ile yöntem adı arasındaki karma işaretine (#) dikkat edin.
func true InstrumentationTestCase aralığını genişleten tüm test sınıflarını çalıştırır.
unit true InstrumentationTestCase veya PerformanceTestCase özelliklerini uzatmayan tüm test sınıflarını çalıştırır.
size [small | medium | large] Boyuta göre ek açıklamalı bir test yöntemi çalıştırır. Ek açıklamalar: @SmallTest, @MediumTest ve @LargeTest.
perf true PerformanceTestCase yöntemini uygulayan tüm test sınıflarını çalıştırır. Bu seçeneği kullandığınızda, çıkışın ham biçimde tutulması ve test sonuçları olarak yeniden biçimlendirilmemesi amacıyla am instrument için -r işaretini belirtin.
debug true Testleri hata ayıklama modunda çalıştırır.
log true Belirtilen tüm testleri yükler ve günlüğe kaydeder ancak çalıştırmaz. Test bilgileri STDOUT sayfasında görünür. Diğer filtrelerin kombinasyonlarını ve test spesifikasyonlarını doğrulamak için bunu kullanın.
emma true EMMA kod kapsamı analizi yürütür ve çıkışı cihazda /data/<app_package>/coverage.ec öğesine yazar. Dosya konumunu geçersiz kılmak için aşağıdaki girişte açıklanan coverageFile anahtarını kullanın.

Not: Bu seçenek, test uygulamasının EMMA ile desteklenen bir derlemesini gerektirir. Bu derlemeyi coverage hedefiyle oluşturabilirsiniz.

coverageFile <filename> Cihazda EMMA kapsam dosyasının varsayılan konumunu geçersiz kılar. Bu değeri UNIX biçiminde bir yol ve dosya adı olarak belirtin. Varsayılan dosya adı, emma anahtarı girişinde açıklanmıştır.

-e işaretini kullanırken aşağıdakilere dikkat edin:

  • am instrument, anahtar/değer çiftlerini içeren bir Bundle ile onCreate(Bundle) kodunu çağırır.
  • package anahtarı, class anahtarına göre önceliklidir. Bir paket belirtir ve ardından bu paket içinde ayrıca bir sınıf belirtirseniz Android, paketteki tüm testleri çalıştırır ve sınıf anahtarını yoksayar.
  • func anahtarı ile unit anahtarı karşılıklı olarak birbirini dışlar.

Kullanım örnekleri

Aşağıdaki bölümlerde, test çalıştırmak için am instrument kullanımıyla ilgili örnekler verilmektedir. Bunlar aşağıdaki yapıya dayanır:

  • Test paketinin Android paket adı com.android.demo.app.tests.
  • İki araçlı test sınıfı:
    • TestClass1 ve testMethod1 test yöntemini içerir.
    • testMethod2 ve testMethod3 test yöntemlerini içeren TestClass2.
  • Test çalıştırıcısı: AndroidJUnitRunner.

Test paketinin tamamını çalıştırma

Test paketindeki tüm test sınıflarını çalıştırmak için şunu girin:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Tüm testleri bir test durumu sınıfında çalıştırma

TestClass1 sınıfındaki tüm testleri yapmak için şunu girin:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Test alt kümesi seçin

TestClass1 sınıfındaki ve testMethod3 yöntemindeki tüm testleri TestClass2 öğesinde çalıştırmak için şunları girin:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Daha fazla kullanım alanını AndroidJUnitRunner API referansında bulabilirsiniz.