Testler çalıştırın (Atest)

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.