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ına ait komut satırı seçeneklerini bilmenize 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 listeyi atest --help
üzerinden bulabilirsiniz.
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 bir cihaz test edilebilir. |
-d |
--disable-teardown |
Testi kaldırma ve temizleme işlemlerini devre dışı bırakır. |
|
--dry-run |
Kuru çalıştırma Testleri gerçekten derlemeden, yüklemeden veya çalıştırmadan test etme. |
-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 Ayıklama düzeyinde günlük kaydını gösterir. |
|
--iterations |
Maksimum iterasyona ulaşılana kadar testleri döngü içinde ç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 AVD oluşturur ve sanal cihazda testler ç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 yüklü bir cihaz gerektiren bir ana makine 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
Test ç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 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ı
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ı testleri hem de entegrasyon tabanlı testleri çalıştırmayı 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, CtsVideoTestCases
modülünü dosya yolu kullanarak çalıştırmanı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
'teki bir dosya yolu kullanılarak 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 derleme 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 derlenmesi gerekir ancak bu, testleri çalıştırmak için gereken süreyi azaltı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üllerden 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 oluşturur ve çalıştırır. Bu nedenle, bir modüldeki sınıfların bir alt kümesini 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 ikililerini çalıştırma
Atest, GTest ikililerini ç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 (:) ve belirli bir yöntemi daha ayrıntılı olarak belirtmek için hashtag (#) 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 ayrı 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ı: presubmit
(varsayılan), postsubmit
, mainline-presubmit
ve all
.
Gönderim sonrası testleri, mevcut ve üst dizinlerdeki TEST_MAPPING dosyalarında ç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 ve üst dizinlerindeki TEST_MAPPING dosyalarında ana hat testlerini ç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. Atest, başarılı veya başarısız olsun, maksimum iterasyona ulaşılana kadar testi tekrar eder.
Örnekler:
Atest varsayılan olarak 10 kez iterasyon 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 meydana gelene veya maksimum iterasyona 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
'ü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 AVD'de test çalıştırabilir. 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 AVD başlatın ve üzerinde testler çalıştırın:
acloud create --local-instance --local-image && atest test-to-run
Test çalışması 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çenekleri biçimine uyduğ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 çalıştırıcı 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.