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 dokümanda, Android uygulaması oluşturmayı ve uygulamanız için test yazmayı bildiğiniz varsayılmaktadır. Uygulamanız için test oluşturma hakkında daha fazla bilgi edinmek istiyorsanız Android'de uygulamaları test etme başlıklı makaleyi inceleyin.

Bu sayfada açıklanan komut satırı araçları ve Gradle görevleri, kullanıcı arayüzü araç setinden bağımsızdır. Compose için kullanıcı arayüzü testleri yazmak istiyorsanız Compose düzeninizi test etme başlıklı makaleyi inceleyin. Testleriniz yazıldıktan sonra, bunları terminalinizden veya uzaktaki sürekli entegrasyon ortamınızdan çalıştırmak için bu kılavuzla devam edin.

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ümantasyon testleri çalıştırmayı öğrenmek için Gradle tarafından yönetilen cihazlarla 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 özetlenmiştir:

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 test sonucu 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.

Enstrümanlı 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/ 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

check ve connectedCheck Gradle görevlerini de çalıştırabilirsiniz. Bu görevler sırasıyla yerel veya enstrümantasyon testlerinizi çalıştırır ancak diğer Gradle eklentileri tarafından eklenen diğer kontrolleri de içerir.

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 testler çalıştırabilirsiniz. Örneğin, aşağıdaki komut yalnızca mylibrary modülü için enstrümantasyon testleri çalıştırır:

./gradlew mylibrary:connectedAndroidTest

Derleme varyantında 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
  • Enstrümantasyon testleri için:
    ./gradlew connectedVariantNameAndroidTest

Belirli test yöntemlerini veya sınıflarını ç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 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ı inceleyin.


./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, çalıştırılacak testleri seçmek için diğer yöntemlere kıyasla 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 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 kabukta, am komutunu kullanarak etkinlik yöneticisi ile etkileşim kurabilir ve testlerinizi çalıştırmak için instrument alt komutunu kullanabilirsiniz.

Kısayol olarak, bir adb kabuğu başlatabilir, am instrument ç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ızdaki komut satırına 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 uygulamanızın Android paket dosyalarını (APK dosyaları) mevcut Android tabanlı 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 şudur: AndroidJUnitRunner:

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

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

am instrument flags

am instrument komutuyla kullanılacak tüm işaretlerin listesini görmek 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şaret

İşaret Değer Açıklama
-w (hiçbiri) am instrument aracının, kendisini sonlandırmadan önce araçlandırmanın sonlandırılmasını beklemesini zorunlu kılar. Bu sayede, testler tamamlanana kadar kabuk açık kalır. Testlerinizin sonuçlarını görmek için bu işaret gereklidir.
-r (hiçbiri) 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şaretiyle birlikte kullanılmak üzere tasarlanmıştır (am enstrüman seçenekleri bölümünde açıklanmıştır).
-e <test_options> Anahtar/değer çiftleri olarak test seçenekleri sunar. am instrument aracı, onCreate() yöntemini kullanarak bunları belirtilen enstrümantasyon sınıfına iletir. -e <test_options> öğesinin birden fazla örneğini 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 ile kullanabilirsiniz. Bu sınıfların diğer sınıflarla birlikte kullanılması herhangi bir etki yaratmaz.
--no-hidden-api-checks (hiçbiri) Gizli API'lerin kullanımına ilişkin 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ı, test seçeneklerini -e işaretini kullanarak anahtar/değer çiftleri biçiminde AndroidJUnitRunner veya InstrumentationTestRunner aracına iletir. Bu işlem için aşağıdaki söz dizimi kullanılır:

-e <key> <value>

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

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 birden fazla Java paketi olabilir.
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 diyez işaretine (#) dikkat edin.
size [small | medium | large] Boyuta göre ek açıklama eklenmiş bir test yöntemini çalıştırır. Notlar @SmallTest, @MediumTest ve @LargeTest'dir.
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 bölümünde gösterilir. Diğer filtrelerin ve test spesifikasyonlarının kombinasyonlarını doğrulamak için bunu kullanın.
emma true EMMA kod kapsamı analizi çalıştırır ve çıkışı cihazdaki /data/<app_package>/coverage.ec dosyasına 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 donatılmış bir derlemesini gerektirir. 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 bir yol ve dosya adı olarak belirtin. Varsayılan dosya adı, emma anahtarının 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) yöntemini çağırır.
  • package anahtarı, class anahtarına göre önceliklidir. Bir paket belirtir ve ardından bu paketteki bir sınıfı ayrı olarak belirtirseniz Android, paketteki tüm testleri çalıştırır ve sınıf anahtarını yoksayar.
  • func anahtarı ve unit anahtarı birlikte kullanılamaz.

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 göre oluşturulur:

  • Test paketinin Android paket adı com.android.demo.app.tests.
  • İki enstrümantasyon 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

Sınıftaki tüm testleri çalıştırmak için TestClass1 ş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çme

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

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

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

Android Gradle eklentisi, birim ve enstrümantasyon testlerinin Birleştirilmiş Sonuçlarını birleştiren HTML kontrol panelleri oluşturan birleştirilmiş test görevleri sağlar.

Ön koşullar

  • Android Gradle Eklentisi 9.5.0-alpha05 veya sonraki sürümler.

Tüm test paketlerini test etmek için aşağıdaki görevlerden birini çalıştırın:

Rapor kapsamı Komut Açıklama Rapor konumu
Geçerli modül ./gradlew :module_name:testAllSuites --continue Birim ve enstrümantasyonlu 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/testAllSuites/test-report/
Mevcut modül ve bağımlılıklar ./gradlew :module_name:testAllSuitesWithDependencies --continue Mevcut modül ve kitaplık bağımlılıkları için birim ve enstrümantasyon testi sonuçlarını birleştiren birleşik bir test raporu oluşturur. path_to_your_project/module_name/build/reports/testAllSuitesWithDependencies/test-report/