Atest, kullanıcıların Android testlerini yerel olarak derlemesine, yüklemesine ve çalıştırmasına olanak tanıyan bir komut satırı aracıdır. Trade Federation test donanım kiti komut satırı seçenekleri hakkında bilgi sahibi olmanıza gerek kalmadan testlerin yeniden çalıştırılmasını büyük ölçüde hızlandırır. Bu sayfada, Android testleri çalıştırmak için Atest'in nasıl kullanılacağı açıklanmaktadır.
Android için test yazma hakkında genel bilgi için 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ı uygulayın.
Ortamınızı ayarlama
Atest ortamınızı ayarlamak için Ortama, Hedef seçme ve Kodu derleme başlıklı makalelerdeki talimatları uygulayın.
Temel kullanım
Atest komutları aşağıdaki biçimdedir:
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 listelenmektedir. Tam listeye atest --help
üzerinden ulaşabilirsiniz.
Option | Uzun seçenek | Açıklama |
---|---|---|
-b |
--build |
Test hedefleri oluşturur. (varsayılan) |
-i |
--install |
Cihaza test yapılarını (APK) yükler. (varsayılan) |
-t |
--test |
Testleri çalıştırır. (varsayılan) |
-s |
--serial |
Testleri belirtilen cihazda çalıştırır. Aynı anda tek bir cihaz test edilebilir. |
-d |
--disable-teardown |
Testi kaldırma ve temizleme işlemlerini devre dışı bırakır. |
|
--dry-run |
Prova, test derlemeden, yüklemeden veya çalıştırmadan Atest'i çalıştırır. |
-m |
--rebuild-module-info |
module-info.json dosyasının yeniden oluşturulmasını zorunlu kılar. |
-w |
--wait-for-debugger |
Çalıştırmadan önce hata ayıklayıcının tamamlanmasını bekler. |
-v |
--verbose |
HATA AYLAGLAMA düzeyinde 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 meydana gelene veya maksimum iterasyona 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 iterasyona ulaşılana kadar başarısız testleri yeniden çalıştırır. (varsayılan olarak 10) |
|
--start-avd |
Otomatik olarak bir ortalama görüntüleme süresi oluşturur ve sanal cihazda testleri ç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 sürümüne sahip bir cihaz gerektiren bir barındırma testi çalıştırıldığında 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: derleme, yükleme veya çalıştırma bölümüne bakın.
Testleri belirtme
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şluklarla 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ı, ilgili testin Android.mk
veya Android.bp
dosyasında 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ı bölümünde açıklananla aynıdır. Sınıf, .java
dosyasındaki test sınıfının adıdır ve tam 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ı
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 çıkışı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 dosyasının veya dizininin 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 yolunu belirterek 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 kullanılarak CtsVideoTestCases
modülünün çalıştırılmasının iki yolu gösterilmektedir.
Android repo-root
'ten çalıştırma:
atest cts/tests/video
Android repo-root/cts/tests/video
'ten çalıştırma:
atest .
Test sınıfı çalıştırma
Aşağıdaki örnekte, dosya yolu kullanılarak CtsVideoTestCases
modülündeki belirli bir sınıfın nasıl çalıştırılacağı gösterilmektedir.
Android repo-root
'den:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Entegrasyon testi çalıştırma
Aşağıdaki örnekte, Android repo-root
sürümünden 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, testleri paket adına göre 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 yapı hedefleri:
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
- Derleyip çalıştırın ancak yüklemeyin:
atest -bt test-to-run
Atest, bir testi temizleme veya kaldırma adımını atlamaya zorlayabilir. CTS gibi birçok test, test çalıştırıldıktan sonra cihazı temizler. Bu nedenle, testinizi -t
ile yeniden çalıştırmayı denemek, --disable-teardown
parametresi olmadan başarısız olur. Test temizleme adımını atlamak ve iteratif olarak test etmek için -d
önce -t
kullanın.
atest -d test-to-run
atest -t test-to-run
Belirli yöntemleri çalıştırma
Atest, 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 testler için gereken süreyi kısaltır. Belirli yöntemleri çalıştırmak için sınıfı, sınıf tanımlamak için desteklenen yöntemlerden herhangi birini (Module:Class, dosya yolu vb.) kullanarak 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, testFlagChange
adlı tek bir yöntemin çalıştırılmasının tercih edilen yolları gösterilmektedir. Modülü veya Java dosyası konumunu belirtmek, Atest'in testi çok daha hızlı bulmasına olanak tanıdığından bu örnekler, yalnızca sınıf adı kullanmak yerine tercih edilir.
Module:Class parametresini kullanarak:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
Android repo-root'den:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
Farklı sınıf ve modüllerde birden fazla yöntem çalıştırılabilir:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Birden fazla sınıf çalıştırma
Birden fazla sınıf çalıştırmak için sınıfları, birden fazla test çalıştırırken yaptığınız gibi boşluklarla ayırın. Atest, sınıfları verimli bir şekilde derler ve çalıştırır. Bu nedenle, bir modülde sınıfların alt kümesi belirtmek, modülün tamamını ç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 ikili programlarını çalıştırma
Atest, GTest ikili programlarını çalıştırabilir. Mevcut tüm cihaz mimarileri için bu testleri çalıştırmak üzere -a
'ü kullanın. Bu örnekte armeabi-v7a
(ARM 32 bit) ve arm64-v8a
(ARM 64 bit) kullanılmaktadır.
Örnek giriş testi:
atest -a libinput_tests inputflinger_tests
.
Çalıştırılacağı belirli bir GTest ikilisini seçmek için test adını belirtmek üzere iki nokta üst üste (:) işareti, ayrı bir yöntemi daha ayrıntılı olarak belirtmek için de hashtag (#) işareti 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ğıdakileri çalıştırın:
atest inputflinger_tests:InputDispatcherTest
Alternatif olarak, aşağıdakileri kullanarak tek bir test çalıştırabilirsiniz:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
TEST_MAPPING'de test çalıştırma
Atest, TEST_MAPPING
dosyalarında test çalıştırabilir.
Gönderme öncesi testleri dolaylı olarak çalıştırma
Mevcut ve üst dizinlerdeki TEST_MAPPING
dosyalarında göndermeden önce testleri çalıştırın:
atest
/path/to/project ve üst dizinlerindeki TEST_MAPPING
dosyalarında göndermeden önce testleri çalıştırın:
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
.
Mevcut ve üst dizinlerdeki TEST_MAPPING dosyalarında gönderim sonrası testleri çalıştırın:
atest :postsubmit
TEST_MAPPING dosyalarındaki tüm gruplardan testler çalıştırın:
atest :all
/path/to/project ve üst dizinlerindeki TEST_MAPPING dosyalarında gönderim sonrası testleri çalıştırın:
atest --test-mapping /path/to/project:postsubmit
/path/to/project klasöründeki ve üst dizinlerindeki TEST_MAPPING dosyalarında ana hat testleri çalıştırın:
atest --test-mapping /path/to/project:mainline-presubmit
Alt dizinlerde test çalıştırma
Varsayılan olarak Atest, yalnızca TEST_MAPPING dosyalarında ve bu dosyaların üst dizinlerinde (mevcut veya belirtilen dizinden üst dizinlerine) test arar. Alt dizinlerdeki TEST_MAPPING dosyalarında da test çalıştırmak istiyorsanız Atest'i bu testleri de dahil etmeye zorlamak için --include-subdirs
kullanın:
atest --include-subdirs /path/to/project
Testleri iterasyonda çalıştırma
--iterations
bağımsız değişkenini ileterek testleri iterasyonda çalıştırın. İşlemin başarılı olup olmaması fark etmeksizin Atest, maksimum yinelemeye ulaşılana kadar testi tekrarlar.
Örnekler:
Atest, varsayılan olarak 10 kez yineleme yapar. 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 yineleme sayısına ulaşılana kadar tüm testleri çalıştırın.
- Bir hata oluştuğunda veya iterasyon 10. (varsayılan olarak) tura ulaştığında durur.
atest test-to-run --rerun-until-failure
- Bir hata oluştuğunda veya iterasyon 100. tura ulaştığında durur.
atest test-to-run --rerun-until-failure 100
2. Yaklaşım: Geçene veya maksimum iterasyona ulaşılana kadar yalnızca başarısız testleri çalıştırın.
test-to-run
ürününün birden fazla test durumu olduğunu ve testlerden birinin başarısız olduğunu varsayalım. Yalnızca başarısız 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 test 100. tura ulaştığında veya geçtiğinde testin çalışmasını durdurun.
atest test-to-run --retry-any-failure 100
AVD'lerde test çalıştırma
Atest, yeni oluşturulan bir ortalama görüntüleme süresinde test yapabilir. AVD oluşturmak ve yapı oluşturmak için acloud create
'ü çalıştırın, ardından testlerinizi çalıştırmak için aşağıdaki örnekleri kullanın.
Bir ortalama görüntüleme süresi (AVD) başlatıp bununla ilgili testler yapabilirsiniz:
acloud create --local-instance --local-image && atest test-to-run
Test çalışması kapsamında bir AVD başlatın:
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çenek biçimine uygun olduğundan emin olun.
atest test-to-run -- [CUSTOM_ARGS]
Test modülü seçeneklerini, test yapılandırması dosyasında tanımlanan hedef hazırlayıcılara veya test çalıştırıcılara iletin:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Bir koşucu türüne veya sınıfına seçenek gönderin:
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çenekleri aktarma başlıklı makaleyi inceleyin.