Komut satırından test etme

Bu belgede, 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 test yazmayı bildiğiniz varsayılır. Uygulamanız için test oluşturma hakkında daha fazla bilgi edinmek istiyorsanız Android'de uygulamaları test etme başlıklı makaleye bakın.

Uygulamanızı Gradle derleme sistemini kullanarak oluşturduğunuzda Android Gradle eklentisi, komut satırını kullanarak Gradle projenizden test çalıştırmanıza olanak tanır. Daha ayrıntılı kontrol için testlerinizi Android Debug Bridge (adb) kabuğu üzerinden çalıştırmayı seçebilirsiniz. Bu, sürekli entegrasyon ortamında test çalıştırırken yararlı olabilir.

Gradle'ın sizin için yönettiği sanal cihazları kullanarak komut satırından otomatik enstrümantasyonlu testleri nasıl çalıştıracağınızı öğrenmek için Gradle Managed Devices ile testlerinizi ölçeklendirme başlıklı makaleyi inceleyin.

Gradle ile test çalıştırma

Android Gradle eklentisi, komut satırını kullanarak Gradle projenizden testler çalıştırmanıza olanak tanır.

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

Tablo 1. Gradle ile testlerinizi çalıştırmanın farklı yolları

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

./gradlew test
HTML testi sonuç dosyaları:
path_to_your_project/module_name/build/reports/tests/ dizini.

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

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

./gradlew connectedAndroidTest
HTML testi sonuç dosyaları:
path_to_your_project/module_name/build/reports/androidTests/connected/ dizini.

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

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

./gradlew cAT

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

Bir modülde test çalıştırma

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

./gradlew mylibrary:connectedAndroidTest

Bir derleme değişkeninde test çalıştırma

test ve connectedAndroidTest görevleri, projenizdeki her derleme değişkeninde testler çalıştırır. Aşağıdaki söz dizimini kullanarak belirli bir derleme değişkenini hedefleyebilirsiniz:

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

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

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


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

adb ile test çalıştırma

Android Debug Bridge (adb) ile komut satırından test çalıştırdığınızda, diğer yöntemlere kıyasla çalıştırılacak testleri seçmek için daha fazla seçeneğiniz olur. Test yöntemlerini tek tek seçebilir, testleri özel bir ek açıklamaya göre filtreleyebilir veya test seçeneklerini belirtebilirsiniz. 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 kabukta, am komutunu kullanarak etkinlik yöneticisi ile etkileşimde bulunabilir ve testlerinizi çalıştırmak için instrument alt komutunu kullanabilirsiniz.

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

am instrument ile test çalıştırmak için:

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

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

    Burada <test_package_name>, test uygulamanızın Android paket adı, <runner_class> ise 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:

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

Test sonuçlarınız STDOUT bölümünde gösterilir.

am instrument flags

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şaretler

İşaretle Değer Açıklama
-w (yok) am instrument, kendisini sonlandırmadan önce enstrümantasyonun sonlandırılmasını bekler. Bu, testler tamamlanana kadar kabuğun açık kalmasını sağlar. Testlerinizin sonuçlarını görmek için bu işaret gereklidir.
-r (yok) Sonuçları ham biçimde verir. Performans ölçümlerini test sonuçları olarak biçimlendirilmeyecek şekilde toplamak istediğinizde bu işareti kullanın. Bu işaret, -e perf true işaretinin (am enstrüman seçenekleri bölümünde belgelenmiştir) kullanımı için tasarlanmıştır.
-e <test_options> Test seçeneklerini anahtar/değer çiftleri olarak sağlar. am instrument aracı, onCreate() yöntemini kullanarak bunları belirtilen enstrümantasyon sınıfına iletir. -e <test_options> öğesinin birden fazla oluşumunu belirtebilirsiniz. Anahtarlar ve değerler, am enstrüman 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. Bu sınıfların diğer sınıflarla birlikte kullanılması herhangi bir etki oluşturmaz.
--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 uygulamanızı nasıl etkileyebileceği hakkında daha fazla bilgi için SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleyi inceleyin.

am instrument options

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

-e <key> <value>

Bazı anahtarlar birden fazla değer kabul eder. Virgülle ayrılmış listede birden fazla değer belirtirsiniz. Örneğin, AndroidJUnitRunner anahtarının bu çağrılması, 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. Test çalıştırıcınızla kullanılacak anahtar/değer çiftlerini -e işaretiyle işaretleyin.

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ığını unutmayın. Test paketinin tek bir Android paket adı vardır ancak içinde birkaç Java paketi olabilir.
class <class_name> Test durumu sınıflarından birinin tam nitelikli Java sınıfı adı. Yalnızca bu test senaryosu 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 diyez işaretine (#) dikkat edin.
func true InstrumentationTestCase'yı genişleten tüm test sınıflarını çalıştırır.
unit true InstrumentationTestCase veya PerformanceTestCase'ü genişletmeyen tüm test sınıflarını çalıştırır.
size [small | medium | large] Boyutla açıklama eklenmiş bir test yöntemini çalıştırır. Anotasyonlar @SmallTest, @MediumTest ve @LargeTest'dir.
perf true PerformanceTestCase uygulayan tüm test sınıflarını çalıştırır. Bu seçeneği kullandığınızda, çıktının ham biçimde kalması ve test sonuçları olarak yeniden biçimlendirilmemesi için -r işaretini am instrument olarak 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 içinde gösterilir. Diğer filtrelerin ve test özelliklerinin kombinasyonlarını doğrulamak için bu özelliği kullanın.
emma true EMMA kod kapsamı analizini çalıştırır ve çıkışı cihazdaki /data/<app_package>/coverage.ec konumuna yazar. Dosya konumunu geçersiz kılmak için aşağıdaki girişte açıklanan coverageFile tuşunu kullanın.

Not: Bu seçenek için test uygulamasının EMMA ile donatılmış bir derlemesi gerekir. Bu derlemeyi coverage hedefiyle oluşturabilirsiniz.

coverageFile <filename> Cihazdaki EMMA kapsam dosyasının varsayılan konumunu geçersiz kılar. Bu değeri UNIX biçiminde yol ve dosya adı olarak belirtin. Varsayılan dosya adı, emma anahtarıyla ilgili giriş bölümünde 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)'i çağırır.
  • package anahtarı, class anahtarına göre önceliklidir. Bir paket belirtip ardından bu paketin içinde ayrı olarak bir sınıf belirtirseniz Android, paketteki tüm testleri çalıştırır ve sınıf anahtarını yoksayar.
  • func anahtarı ve unit anahtarı aynı anda olamaz.

Kullanım örnekleri

Aşağıdaki bölümlerde, test çalıştırmak için am instrument kullanma örnekleri verilmiştir. Aşağıdaki yapıya dayanır:

  • Test paketinin Android paket adı com.android.demo.app.tests olmalıdır.
  • İki araçlı test sınıfı:
    • TestClass1, which contains the test method testMethod1.
    • TestClass2, test yöntemleri testMethod2 ve testMethod3'yi içerir.
  • 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

Bir test durumu sınıfındaki tüm testleri çalıştırma

TestClass1 sınıfındaki tüm testleri çalıştırmak 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 tüm testleri ve TestClass2 içindeki testMethod3 yöntemini çalıştırmak için: şunu 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

Diğer kullanım alanlarını AndroidJUnitRunner API referansında bulabilirsiniz.

Birleştirilmiş test raporlarını görüntüleme

Android Gradle eklentisi, birim ve araçlı testlerden elde edilen sonuçları birleştiren HTML kontrol panelleri oluşturan birleştirilmiş test raporu görevleri sağlar.

Ön koşullar

  • Android Gradle Eklentisi 9.2.0-alpha07 veya sonraki sürümler.

Birleştirilmiş test raporları oluşturmak için aşağıdaki görevlerden birini çalıştırın:

Rapor kapsamı Komut Açıklama Konumu bildirme
Geçerli modül ./gradlew :module_name:createTestReport Birim ve araçlı test sonuçlarını birleştirerek mevcut modül için birleşik bir test raporu oluşturur. path_to_your_project/module_name/build/reports/tests/test-report/
Mevcut modül ve bağımlılıklar ./gradlew :module_name:createAggregatedTestReport Mevcut uygulama modülü ve kitaplık bağımlılıkları için birleştirilmiş bir test raporu oluşturur. path_to_your_project/module_name/build/reports/tests/aggregated-test-report/