Atest, kullanıcıların Android testlerini yerel olarak oluşturmasına, yüklemesine ve çalıştırmasına olanak tanıyan bir komut satırı aracıdır. Bu araç, Trade Federation test harness komut satırı seçenekleri hakkında bilgi sahibi olmayı gerektirmeden testlerin yeniden çalıştırılmasını büyük ölçüde hızlandırır. Bu sayfada, Android testlerini çalıştırmak için Atest'in nasıl kullanılacağı açıklanmaktadır.
Android için test yazma hakkında genel bilgi edinmek istiyorsanız Android Platform Testing (Android Platform Testi) başlıklı makaleyi inceleyin.
Atest'in genel yapısı hakkında bilgi edinmek için Atest Geliştirici Kılavuzu'na bakın.
Atest aracılığıyla TEST_MAPPING dosyalarında test çalıştırma hakkında bilgi edinmek için TEST_MAPPING dosyalarında test çalıştırma başlıklı makaleyi inceleyin.
Atest'e özellik eklemek için Atest Geliştirici İş Akışı'nı izleyin.
Ortamınızı ayarlama
Atest ortamınızı ayarlamak için Ortamı ayarlama, Hedef seçme ve Kodu oluşturma bölümlerindeki talimatları uygulayın.
Temel kullanım
Atest komutları aşağıdaki biçimde olur:
atest test-to-run [optional-arguments]
İsteğe bağlı bağımsız değişkenler
Aşağıdaki tabloda en sık kullanılan bağımsız değişkenler listelenmiştir. Tam listeye atest --help
üzerinden ulaşabilirsiniz.
Option | Uzun seçenek | Açıklama |
---|---|---|
-b |
--build |
Test hedefleri oluşturur. (varsayılan) |
-i |
--install |
Test yapılarını (APK'lar) cihaza yükler. (varsayılan) |
-t |
--test |
Testleri çalıştırır. (varsayılan) |
-s |
--serial |
Testleri belirtilen cihazda çalıştırır. Tek seferde yalnızca bir cihaz test edilebilir. |
-d |
--disable-teardown |
Testi sonlandırma ve temizleme işlemlerini devre dışı bırakır. |
|
--dry-run |
Testleri gerçekten oluşturmadan, yüklemeden veya çalıştırmadan Atest'i prova edin. |
-m |
--rebuild-module-info |
module-info.json dosyasının yeniden oluşturulmasını zorlar. |
-w |
--wait-for-debugger |
Çalıştırmadan önce hata ayıklayıcının tamamlanmasını bekler. |
-v |
--verbose |
HATA AYIKLAMA düzeyindeki günlük kaydını gösterir. |
|
--iterations |
Döngü, maksimum yinelemeye ulaşılana kadar testleri çalıştırır. (varsayılan olarak 10) |
|
--rerun-until-failure [COUNT=10] |
Bir hata oluşana veya maksimum yinelemeye ulaşılana kadar tüm testleri yeniden çalıştırır. (varsayılan olarak 10) |
|
--retry-any-failure [COUNT=10] |
Başarılı olana veya maksimum yinelemeye ulaşılana kadar başarısız testleri yeniden çalıştırır. (varsayılan olarak 10) |
|
--start-avd |
Otomatik olarak bir AVD oluşturur ve testleri sanal cihazda çalıştırır. |
|
--acloud-create |
acloud komutunu kullanarak AVD oluşturur. |
|
--[CUSTOM_ARGS] |
Test çalıştırıcıları için özel bağımsız değişkenler belirtir. |
-a |
--all-abi |
Mevcut tüm cihaz mimarileri için testleri çalıştırır. |
|
--host |
Testi cihaz olmadan tamamen ana makinede çalıştırır. Not: --host
gerektiren bir ana makine testi çalıştırılırsa test başarısız olur. |
|
--history |
Test sonuçlarını kronolojik sırayla gösterir. |
|
--latest-result |
En son test sonucunu yazdırır. |
-b
, -i
ve -t
hakkında daha fazla bilgi için Adımları belirtme: oluşturma, yükleme veya çalıştırma bölümüne bakın.
Testleri belirtin
Testleri çalıştırmak için aşağıdaki tanımlayıcılardan birini kullanarak bir veya daha fazla test belirtin:
- Modül adı
- Modül:Sınıf
- Sınıf adı
- Tradefed entegrasyon testi
- Dosya yolu
- Paket adı
Birden fazla teste yapılan referansları boşlukla ayırın. Örneğin:
atest test-identifier-1 test-identifier-2
Modül adı
Bir test modülünün tamamını çalıştırmak için modül adını kullanın. Adı, söz konusu testin Android.mk
veya Android.bp
dosyasındaki LOCAL_MODULE
ya da LOCAL_PACKAGE_NAME
değişkenlerinde göründüğü şekilde girin.
Örnekler:
atest FrameworksServicesTests
atest CtsVideoTestCases
Modül:Sınıf
Bir modülde tek bir sınıf çalıştırmak için Modül:Sınıf'ı kullanın. Modül, Modül adı'nda açıklandığı gibidir. Class, .java
dosyasındaki test sınıfının adıdır ve tam nitelikli sınıf adı veya temel ad olabilir.
Örnekler:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Sınıf adı
Bir modül adını açıkça belirtmeden tek bir sınıf çalıştırmak için sınıf adını kullanın.
Örnekler:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
Tradefed entegrasyon testi
Doğrudan TradeFed'e entegre edilmiş testleri (modül olmayanlar) çalıştırmak için adı tradefed.sh list configs
komutunun çıktısında göründüğü şekilde girin. Örneğin:
reboot.xml
testini çalıştırmak için:
atest example/reboot
native-benchmark.xml
testini çalıştırmak için:
atest native-benchmark
Dosya yolu
Atest, test dosyalarının veya dizinlerinin yolunu uygun şekilde girerek hem modül tabanlı testlerin hem de entegrasyon tabanlı testlerin çalıştırılmasını destekler. Ayrıca, sınıfın Java dosyasının yolu belirtilerek tek bir sınıfın çalıştırılmasını da destekler. Hem göreli hem de mutlak yollar desteklenir.
Modül çalıştırma
Aşağıdaki örneklerde, dosya yolu kullanarak CtsVideoTestCases
modülünü çalıştırmanın iki yolu gösterilmektedir.
Android repo-root
cihazından çalıştırma:
atest cts/tests/video
Android repo-root/cts/tests/video
cihazından çalıştırma:
atest .
Test sınıfı çalıştırma
Aşağıdaki örnekte, dosya yolu kullanarak CtsVideoTestCases
modülünde belirli bir sınıfın nasıl çalıştırılacağı gösterilmektedir.
Android'den repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Entegrasyon testi çalıştırma
Aşağıdaki örnekte, Android repo-root
'deki bir dosya yolunu kullanarak entegrasyon testinin nasıl çalıştırılacağı gösterilmektedir:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Paket adı
Atest, paket adına göre test aramayı destekler.
Örnekler:
atest com.android.server.wm
atest com.android.uibench.janktests
Adımları belirtin: Derleme, yükleme veya çalıştırma
Hangi adımların çalıştırılacağını belirtmek için -b
, -i
ve -t
seçeneklerini kullanın. Bir seçenek belirtmezseniz tüm adımlar çalıştırılır.
- Yalnızca hedef oluşturma:
atest -b test-to-run
- Yalnızca testleri çalıştır:
atest -t test-to-run
- APK'yı yükleyin ve testleri çalıştırın:
atest -it test-to-run
- Derleyin ve çalıştırın ancak yüklemeyin:
atest -bt test-to-run
Atest, bir testin temizleme veya yıkım adımını atlamasını zorlayabilir. CTS gibi birçok test, test çalıştırıldıktan sonra cihazı temizler. Bu nedenle, testinizi -t
ile yeniden çalıştırmayı denerseniz --disable-teardown
parametresi olmadan başarısız olur. Test temizleme adımını atlayıp yinelemeli olarak test etmek için -d
önce -t
simgesini kullanın.
atest -d test-to-run
atest -t test-to-run
Belirli yöntemleri çalıştırma
Atest, bir test sınıfında belirli yöntemlerin çalıştırılmasını destekler. Modülün tamamının oluşturulması gerekse de bu, testlerin çalıştırılması için gereken süreyi kısaltır. Belirli yöntemleri çalıştırmak için sınıfı tanımlamak üzere desteklenen yöntemlerden herhangi birini kullanarak (Module:Class, dosya yolu vb.) sınıfı tanımlayın ve yöntemin adını ekleyin:
atest reference-to-class#method1
Birden fazla yöntem belirtirken bunları virgülle ayırın:
atest reference-to-class#method1,method2,method3
Örnekler:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
Aşağıdaki iki örnekte, tek bir yöntemi (testFlagChange
) çalıştırmanın tercih edilen yolları gösterilmektedir. Modülün veya Java dosyasının konumunu belirtmek, Atest'in testi çok daha hızlı bulmasını sağladığından bu örnekler yalnızca sınıf adını kullanmaya tercih edilir.
Module:Class: kullanma:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
Android'den repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
Farklı sınıflardan ve modüllerden birden fazla yöntem çalıştırılabilir:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Birden fazla sınıfı yönetme
Birden fazla sınıf çalıştırmak için bunları, birden fazla test çalıştırmada olduğu gibi boşluklarla ayırın. Atest, sınıfları verimli bir şekilde oluşturup çalıştırır. Bu nedenle, bir modüldeki sınıfların alt kümesini belirtmek, tüm modülü çalıştırmaya kıyasla performansı artırır.
Aynı modülde iki sınıf çalıştırmak için:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
Farklı modüllerde iki sınıf çalıştırmak için:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
GTest ikililerini çalıştırma
Atest, GTest ikili dosyalarını çalıştırabilir. Bu testleri mevcut tüm cihaz mimarileri için çalıştırmak üzere -a
kullanın. Bu örnekte, armeabi-v7a
(ARM 32 bit) ve arm64-v8a
(ARM 64 bit) mimarileri kullanılmaktadır.
Örnek giriş testi:
atest -a libinput_tests inputflinger_tests
Çalıştırılacak belirli bir GTest ikilisini seçmek için testi belirtmek üzere iki nokta üst üste (:), tek bir yöntemi daha ayrıntılı olarak belirtmek için ise diyez (#) kullanın.
Örneğin, aşağıdaki test tanımı için:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Testin tamamını belirtmek için aşağıdaki komutu çalıştırın:
atest inputflinger_tests:InputDispatcherTest
Alternatif olarak, aşağıdakileri kullanarak ayrı bir test çalıştırın:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
TEST_MAPPING'de test çalıştırma
Atest, TEST_MAPPING
dosyalarında testler çalıştırabilir.
Gönderme öncesi testlerini örtülü olarak çalıştırma
Geçerli ve üst dizinlerdeki TEST_MAPPING
dosyalarında gönderme öncesi testleri çalıştırma:
atest
TEST_MAPPING
dosyalarında /path/to/project ve üst dizinlerinde gönderme öncesi testleri çalıştırma:
atest --test-mapping /path/to/project
Belirli bir test grubunu çalıştırma
Kullanılabilir test grupları şunlardır: presubmit
(varsayılan), postsubmit
, mainline-presubmit
ve all
.
Geçerli ve üst dizinlerdeki TEST_MAPPING dosyalarında gönderme sonrası testleri çalıştırma:
atest :postsubmit
TEST_MAPPING dosyalarındaki tüm gruplardan testleri çalıştırma:
atest :all
/path/to/project ve üst dizinlerindeki TEST_MAPPING dosyalarında gönderme sonrası testleri çalıştırma:
atest --test-mapping /path/to/project:postsubmit
/path/to/project ve üst dizinlerindeki TEST_MAPPING dosyalarında ana hat testleri çalıştırma:
atest --test-mapping /path/to/project:mainline-presubmit
Alt dizinlerde test çalıştırma
Atest, varsayılan olarak yalnızca TEST_MAPPING dosyalarındaki testleri yukarı doğru (mevcut veya verilen dizinden üst dizinlerine) arar. Alt dizinlerdeki TEST_MAPPING dosyalarında da test çalıştırmak istiyorsanız Atest'in bu testleri de dahil etmesini zorlamak için --include-subdirs
kullanın:
atest --include-subdirs /path/to/project
Yinelemede test çalıştırma
--iterations
bağımsız değişkenini ileterek testleri yinelemeli olarak çalıştırın. Atest, başarılı veya başarısız olmasına bakılmaksızın maksimum yineleme sayısına ulaşılana kadar testi tekrarlar.
Örnekler:
Varsayılan olarak Atest 10 kez yinelenir. Yineleme sayısı pozitif bir tam sayı olmalıdır.
atest test-to-run --iterations
atest test-to-run --iterations 5
Aşağıdaki yaklaşımlar, güvenilir olmayan testleri tespit etmeyi kolaylaştırır:
1. yaklaşım: Bir hata oluşana veya maksimum yinelemeye ulaşılana kadar tüm testleri çalıştırın.
- Bir hata oluştuğunda veya yineleme varsayılan olarak 10. tura ulaştığında durdurulur.
atest test-to-run --rerun-until-failure
- Hata oluştuğunda veya yineleme 100. tura ulaştığında durdurun.
atest test-to-run --rerun-until-failure 100
2. yaklaşım: Yalnızca başarısız olan testleri, başarılı olana veya maksimum yineleme sayısına ulaşılana kadar çalıştırın.
test-to-run
öğesinin birden fazla test durumu olduğunu ve testlerden birinin başarısız olduğunu varsayalım. Yalnızca başarısız olan testi 10 kez (varsayılan olarak) veya test başarılı olana kadar çalıştırın.atest test-to-run --retry-any-failure
- Başarısız olan testi, başarılı olduğunda veya 100. tura ulaştığında durdurun.
atest test-to-run --retry-any-failure 100
AVD'lerde test çalıştırma
Atest, yeni oluşturulan bir AVD'de testler çalıştırabilir. AVD oluşturmak ve yapılar oluşturmak için acloud create
komutunu çalıştırın, ardından testlerinizi çalıştırmak için aşağıdaki örnekleri kullanın.
AVD başlatma ve üzerinde test çalıştırma:
acloud create --local-instance --local-image && atest test-to-run
Test çalıştırması kapsamında bir AVD başlatma:
atest test-to-run --acloud-create "--local-instance --local-image"
Daha fazla bilgi için acloud create --help
komutunu çalıştırın.
Modüle seçenekler iletme
Atest, test modüllerine seçenekler iletebilir. Test çalıştırmanıza TradeFed komut satırı seçenekleri eklemek için aşağıdaki yapıyı kullanın ve özel bağımsız değişkenlerinizin Tradefed komut satırı seçeneği biçimine uygun olduğundan emin olun.
atest test-to-run -- [CUSTOM_ARGS]
Test yapılandırma dosyasında tanımlanan hedef hazırlayıcılara veya test çalıştırıcılarına test modülü seçenekleri aktarın:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Bir çalıştırıcı türüne veya sınıfına seçenekler iletme:
atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Yalnızca test seçenekleri hakkında daha fazla bilgi için Modüllere seçenek iletme başlıklı makaleyi inceleyin.