Testleri çalıştırma (Atest)

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 ve Ticaret Federasyonu test donanımı komut satırı seçenekleri hakkında bilgi gerektirmeden testin 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 testler yazmaya ilişkin genel bilgi için bkz. Android Platform Testi .

Atest'in genel yapısı hakkında bilgi için Atest Geliştirici Kılavuzu'na bakın.

TEST_MAPPING dosyalarında testleri Atest aracılığıyla çalıştırma hakkında bilgi için bkz. TEST_MAPPING dosyalarında testleri çalıştırma .

Atest'e bir özellik eklemek için Atest Geliştirici İş Akışını izleyin.

Ortamınızı ayarlayın

Atest ortamınızı kurmak için Ortamı ayarlama , Hedef seçme ve Kodu oluşturma bölümündeki talimatları izleyin.

Temel kullanım

Atest komutları aşağıdaki formu alır:

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 argümanlar listelenmektedir. Tam listeye atest --help aracılığıyla ulaşılabilir.

Seçenek Uzun seçenek Tanım
-b --build Test hedefleri oluşturur. (varsayılan)
-i --install Cihaza test yapıtlarını (APK'ler) yükler. (varsayılan)
-t --test Testleri çalıştırır. (varsayılan)
-s --serial Testleri belirtilen cihazda çalıştırır. Aynı anda bir cihaz test edilebilir.
-d --disable-teardown Test sökme ve temizlemeyi devre dışı bırakır.
--info Kullanımdan kaldırıldı.
--dry-run Gerçekte testler oluşturmadan, kurmadan veya çalıştırmadan Atest'i kuru çalıştırır.
-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 bitmesini bekler.
-v --verbose DEBUG seviyesi günlüğünü görüntüler.
--iterations Döngü, maksimum yinelemeye ulaşılıncaya 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ısız testleri geçilene veya maksimum yinelemeye ulaşılana kadar 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 bir AVD oluşturur.
--[CUSTOM_ARGS] Test çalıştırıcıları için özel bağımsız değişkenleri belirtir.
-a --all-abi Mevcut tüm cihaz mimarileri için testleri çalıştırır.
--host Testi bir cihaz olmadan tamamen ana bilgisayarda çalıştırır.
Not: --host ile bir cihaz gerektiren bir ana bilgisayar testinin çalıştırılması 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 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 ismi

Birden fazla teste yapılan referansları aşağıdaki gibi boşluklarla ayırın:

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 veya LOCAL_PACKAGE_NAME değişkenlerinde göründüğü şekilde girin.

Örnekler:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modül:Sınıf

Bir modül içinde tek bir sınıfı çalıştırmak için Module:Class 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ı

Açıkça bir modül adı 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 dosyası 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öreceli hem de mutlak yollar desteklenir.

Bir modül çalıştırın

Aşağıdaki örneklerde CtsVideoTestCases modülünü bir dosya yolu kullanarak çalıştırmanın iki yolu gösterilmektedir.

Android repo-root çalıştırın:

atest cts/tests/video

Android repo-root/cts/tests/video çalıştırın:

    atest .

Bir test sınıfı çalıştırın

Aşağıdaki örnek, CtsVideoTestCases modülü içinde belirli bir sınıfın bir dosya yolu kullanılarak nasıl çalıştırılacağını gösterir.

Android repo-root :

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Entegrasyon testi çalıştırın

Aşağıdaki örnek, Android repo-root bir dosya yolunu kullanarak bir entegrasyon testinin nasıl çalıştırılacağını gösterir:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

Paket ismi

Atest, testlerin paket adına göre aranmasını destekler.

Örnekler:

    atest com.android.server.wm
    atest com.android.uibench.janktests

Adımları belirtin: Oluşturun, yükleyin veya çalıştırın

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'yi 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, testi temizleme veya sökme adımını atlamaya zorlayabilir. CTS gibi birçok test, test çalıştırıldıktan sonra cihazı temizler; dolayısıyla testinizi -t ile yeniden çalıştırmayı denemek --disable-teardown parametresi olmadan başarısız olur. Test temizleme adımını atlamak ve tekrarlayarak test etmek için -t önce -d kullanın.

atest -d test-to-run
atest -t test-to-run

Belirli yöntemleri çalıştırın

Atest, bir test sınıfı içinde belirli yöntemlerin çalıştırılmasını destekler. Tüm modülün oluşturulması gerekse de bu, testleri çalıştırmak için gereken süreyi azaltır. Belirli yöntemleri çalıştırmak için, bir sınıfı tanımlamak için desteklenen yollardan herhangi birini (Modül: Sınıf, dosya yolu vb.) kullanarak 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 örnek, tek bir yöntemi ( testFlagChange çalıştırmanın tercih edilen yollarını gösterir. Bu örnekler yalnızca sınıf adının kullanılmasına tercih edilir çünkü modülün veya Java dosyasının konumunun belirtilmesi Atest'in testi çok daha hızlı bulmasını sağlar.

Modül Kullanımı: Sınıf:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Android 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ı çalıştırın

Birden çok sınıfı çalıştırmak için, birden çok test çalıştırırken olduğu gibi bunları boşluklarla ayırın. Atest, sınıfları verimli bir şekilde oluşturur ve çalıştırır; dolayısıyla, bir modülde sınıfların bir alt kümesini belirlemek, tüm modülü çalıştırma performansını artırır.

İki sınıfı aynı modülde çalıştırmak için:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

İki sınıfı farklı modüllerde çalıştırmak için:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

GTest ikili dosyalarını çalıştırın

Atest, GTest ikili dosyalarını çalıştırabilir. Bu testleri, bu örnekte armeabi-v7a (ARM 32-bit) ve arm64-v8a (ARM 64-bit) olan tüm mevcut cihaz mimarileri için çalıştırmak için -a kullanın.

Örnek giriş testi:

atest -a libinput_tests inputflinger_tests

Çalıştırılacak belirli bir GTest ikili programını seçmek için, test adını belirtmek üzere iki nokta üst üste (:) ve ayrı bir yöntemi belirtmek için bir 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

Veya aşağıdakileri kullanarak ayrı bir test çalıştırın:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

TEST_MAPPING'de testleri çalıştırın

Atest, TEST_MAPPING dosyalarında testler çalıştırabilir.

Gönderim öncesi testleri örtülü olarak çalıştırın

Geçerli ve üst dizinlerdeki TEST_MAPPING dosyalarında ön gönderim testlerini çalıştırın:

atest

/path/to/project ve üst dizinlerindeki TEST_MAPPING dosyalarında ön gönderim testlerini çalıştırın:

atest --test-mapping /path/to/project

Belirtilen bir test grubunu çalıştırın

Kullanılabilir test grupları şunlardır: presubmit (varsayılan), postsubmit , mainline-presubmit ve all .

Geçerli 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 ve üst dizinlerindeki TEST_MAPPING dosyalarında ana hat testlerini çalıştırın:

atest --test-mapping /path/to/project:mainline-presubmit

Alt dizinlerde testler çalıştırın

Varsayılan olarak, Atest yalnızca TEST_MAPPING dosyalarındaki testleri yukarıya doğru arar (geçerli veya verilen dizinden üst dizinlerine). Alt dizinlerdeki TEST_MAPPING dosyalarında da testler ç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 yinelemede çalıştırma

--iterations bağımsız değişkenini ileterek testleri yinelemede çalıştırın. Başarılı olsa da başarısız olsa da Atest, maksimum yinelemeye ulaşılana kadar testi tekrarlayacaktır.

Ö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 hatalı testlerin tespitini kolaylaştırır:

Yaklaşım 1: Bir hata oluşana veya maksimum yinelemeye ulaşılana kadar tüm testleri çalıştırın.

  • Bir hata oluştuğunda veya yineleme 10. (varsayılan olarak) tura ulaştığında durun.
    atest test-to-run --rerun-until-failure
    
  • Bir başarısızlık meydana geldiğinde veya yineleme 100. tura ulaştığında durun.
    atest test-to-run --rerun-until-failure 100
    

Yaklaşım 2: Geçilene veya maksimum yinelemeye ulaşılana kadar yalnızca başarısız olan testleri çalıştırın.

  • test-to-run birden fazla test senaryosu içerdiğini ve testlerden birinin başarısız olduğunu varsayalım. Başarısız olan testi yalnızca 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 geçtiğinde veya 100. tura ulaştığında çalışmayı bırakın.
    atest test-to-run --retry-any-failure 100
    

AVD'lerde testler çalıştırın

Atest, yeni oluşturulan bir AVD üzerinde testler yürütebilmektedir. Bir AVD oluşturmak ve yapılar 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 yapın:

acloud create --local-instance --local-image && atest test-to-run

Bir test çalışmasının parçası olarak bir AVD başlatın:

atest test-to-run --acloud-create "--local-instance --local-image"

Daha fazla bilgi için acloud create --help çalıştırın.

Seçenekleri modüle geçirme

Atest, seçenekleri test modüllerine aktarabilmektedir. Test çalıştırmanıza TradeFed komut satırı seçeneklerini 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 formatına uyduğ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çeneklerini iletin:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

Seçenekleri bir koşucu türüne veya sınıfına iletin:

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 bkz. Seçenekleri modüllere geçirme .