Test ç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. 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.