Bu dokümanda, 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 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 hassas bir denetim için testlerinizi Android Debug Bridge (adb) kabuğu üzerinden çalıştırmayı seçebilirsiniz. Bu, sürekli entegrasyon ortamında testleri çalıştırırken yararlı olabilir.
Gradle'ın sizin için yönettiği sanal cihazları kullanarak komut satırından otomatik araçlı testleri nasıl çalıştıracağınızı öğ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 sonucunun konumu |
---|---|---|
Yerel birim testi |
test görevini çalıştırın:
|
HTML test sonucu dosyaları:path_to_your_project/module_name/build/reports/tests/
dizin.
XML test sonucu dosyaları: |
Enstrümanlı birim testi |
connectedAndroidTest görevini çalıştırın:
|
HTML test sonucu dosyaları:path_to_your_project/module_name/build/reports/androidTests/connected/
dizin.
XML test sonucu dosyaları: |
Gradle, görev adı kısaltmalarını destekler.
Örneğin, aşağıdaki komutu girerek connectedAndroidTest
görevini başlatabilirsiniz:
./gradlew cAT
Dilerseniz check
ve connectedCheck
Gradle görevlerini çalıştırabilirsiniz. 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 üst üste (:) işareti ekleyerek belirli bir modülde test çalıştırabilirsiniz. Örneğin, aşağıdaki komut yalnızca mylibrary
modülü için araçlı testler çalıştırır:
./gradlew mylibrary:connectedAndroidTest
Derleme varyantı üzerinde testler çalıştırma
test
ve connectedAndroidTest
görevleri, projenizdeki her derleme varyantı üzerinde test ç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 testlerini ç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 edinmek 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, araçlı test sonuçlarını test ettiği her modülün build/
dizinine 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 fazla modülde test çalıştırırken tek bir rapor oluşturmak için aşağıdaki adımları izleyin:
Proje düzeyindeki
build.gradle
dosyanızda,buildscript{}
blokundan sonra aşağıdakileri ekleyin:Eskitme
apply plugin: 'android-reporting'
Kotlin
apply(plugin = "android-reporting")
mergeAndroidReports
göreviyle birliktetest
veyaconnectedAndroidTest
görevini çağırın. Örnek:./gradlew connectedAndroidTest mergeAndroidReports
Gradle'ın kalan tüm testleri çalıştırmayı bitirmesi için test hatalarını atlamak üzere
--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) 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çenek sunulur. Tek tek test yöntemleri 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 kabuğun 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 tek bir giriş satırında bir adb kabuğu başlatabilir, am instrument
çağırabilir ve komut satırı işaretleri 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 yapmak için:
- Ana uygulamanızı ve test paketinizi oluşturun veya yeniden oluşturun.
- 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.
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örünecek.
am 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 eklentisini, kendisini sonlandırmadan önce araçlar sona erene kadar beklemeye zorlar. Böylece testler tamamlanana kadar kabuk açık kalır. Bu işaret, testlerinizin sonuçlarını görebilmeniz için 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şaretiyle birlikte kullanılmak üzere tasarlanmıştır (am araç seçenekleri bölümünde açıklanmıştır).
|
-e
|
<test_options>
|
Anahtar/değer çiftleri olarak test seçenekleri sağlar. am instrument aracı, onCreate() yöntemini kullanarak bunları belirtilen araç sınıfına aktarır. -e <test_options> öğesinin birden fazla kez tekrarlanmasını belirtebilirsiniz. Anahtarlar ve değerler, AM araç 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ı diğer sınıflarla kullanmanı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 bu durumun uygulamanızı nasıl etkileyebileceği hakkında daha fazla bilgi için SDK dışı arayüzlerle ilgili kısıtlamalar başlıklı makaleyi okuyun. |
amatör araç seçenekleri
am instrument
aracı, -e
işaretini kullanarak test seçeneklerini AndroidJUnitRunner
veya InstrumentationTestRunner
işlevine aşağıdaki söz dizimiyle anahtar/değer çiftleri biçiminde aktarır:
-e <key> <value>
Bazı anahtarlar birden fazla değeri 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 kullanmak üzere anahtar/değer çiftlerini 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ığına dikkat edin. 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 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şaretini (#) not edin. | |
func |
true |
InstrumentationTestCase kapsamını genişleten tüm test sınıflarını çalıştırır.
|
unit |
true |
InstrumentationTestCase veya PerformanceTestCase öğesini genişletmeyen 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 şeklindedir.
|
perf |
true |
PerformanceTestCase uygulayan tüm test sınıflarını çalıştırır.
Bu seçeneği kullandığınızda, çıkışın ham biçimde saklanması 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ükleyip günlüğe kaydeder ancak çalıştırmaz. Test bilgileri STDOUT içinde görünür. Diğer filtrelerin kombinasyonlarını ve test özelliklerini doğrulamak için bunu kullanın.
|
emma |
true |
EMMA kod kapsam analizi çalıştırır ve çıkışı cihazda /data/<app_package>/coverage.ec adresine 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 |
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çıklanmaktadır.
|
-e
işaretini kullanırken aşağıdakilere dikkat edin:
am instrument
, anahtar/değer çiftlerini içeren birBundle
ileonCreate(Bundle)
işlevini çağırır.package
anahtarı,class
anahtarına göre önceliklidir. Bir paket belirtir ve ardından bu paket 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ı veunit
anahtarı karşılıklı olarak birbirini dışlar.
Kullanım örnekleri
Aşağıdaki bölümlerde, testleri çalıştırmak için am instrument
kullanımıyla ilgili örnekler gösterilmektedir.
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ı:
testMethod1
test yöntemini içerenTestClass1
.testMethod2
vetestMethod3
test yöntemlerini içerenTestClass2
.
- Test çalıştırıcısı:
AndroidJUnitRunner
.
Test paketinin tamamını çalıştırın
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 tüm testleri ve TestClass2
öğesinde testMethod3
yöntemini çalıştırmak için şu değeri 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.