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ı 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ü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:
|
HTML test sonucu dosyaları:path_to_your_project/module_name/build/reports/tests/
dizini.
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/
dizini.
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 cATGradle görevlerini check ve connectedCheck da çalıştırabilirsiniz. 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 testler ç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:connectedAndroidTestBir 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ümanlı testler 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 cihazınızda veya emülatörünüzde komut satırı kabuğunu başlatmak üzere adb shell komutunu çalıştırı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 geri döner.
am instrument ile test çalıştırmak için:
- Ana uygulamanızı ve test paketinizi oluşturun veya yeniden oluşturun.
- 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.
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 manifest öğesinin paket özelliği değeridir (AndroidManifest.xml).Android test çalıştırıcı sınıfı genellikle
AndroidJUnitRunnerolur: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 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şaretler
| İşaret | Değer | Açıklama |
|---|---|---|
-w
|
(hiçbiri) |
am instrument, kendisini sonlandırmadan önce enstrümanın sonlandırılmasını beklemeye zorlar. Bu, testler tamamlanana kadar kabuğu açık tutar. 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 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 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ı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ı, AndroidJUnitRunner veya InstrumentationTestRunner'ye anahtar/değer çiftleri şeklinde test seçenekleri iletir. Bu işlemde -e işareti kullanılır ve söz dizimi şu şekildedir:
-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.AndroidJUnitRunnerAş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 birden fazla Java paketi olabilir. |
class |
<class_name> |
Test durumu sınıflarından birinin 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şaretini (#) unutmayın. | |
size |
[small | medium | large]
|
Boyutla açıklama eklenmiş bir test yöntemi çalıştırır. Notlar @SmallTest, @MediumTest ve @LargeTest'dir.
|
debug |
true |
Hata ayıklama modunda testler ç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. Bunu, diğer filtrelerin ve test özelliklerinin kombinasyonlarını doğrulamak için kullanın.
|
emma |
true |
EMMA kod kapsamı analizi çalıştırır ve çıktıyı 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 |
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ı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 birBundleileonCreate(Bundle)çağırır.packageanahtarı,classanahtarı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.funcanahtarı veunitanahtarı 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 göre oluşturulur:
- Test paketinin Android paket adı
com.android.demo.app.tests. - İki enstrümanlı test sınıfı:
TestClass1, which contains the test methodtestMethod1.TestClass2, test yöntemleritestMethod2vetestMethod3'yi içerir.
- Test çalıştırıcı
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.AndroidJUnitRunnerBir 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.AndroidJUnitRunnerTest 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.AndroidJUnitRunnerDaha 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 testlerinden elde edilen sonuçları 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 |
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/tests/test-report/ |
| Mevcut modül ve bağımlılıklar | ./gradlew :module_name:testAllSuitesWithDependencies |
Birim ve enstrümantasyonlu test sonuçlarını birleştirerek mevcut modül ve kitaplık bağımlılıkları için birleşik bir test raporu oluşturur. | path_to_your_project/module_name/build/reports/tests/aggregated-test-report/ |