Koşu Testleri (Atest), Koşu Testleri (Atest)

Atest, kullanıcıların Android testlerini yerel olarak oluşturmasına, kurmasına ve çalıştırmasına izin vererek, Trade Federation test donanımı komut satırı seçenekleri hakkında bilgi gerektirmeden test yeniden çalıştırmalarını büyük ölçüde hızlandıran bir komut satırı aracıdır. Bu sayfada Atest'in Android testlerini çalıştırmak için nasıl kullanılacağı açıklanmaktadır.

Android için test yazma hakkında 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.

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

Atest'e bir özellik eklemek için Atest Developer Workflow'u takip edin.

ortamınızı kurun

Atest ortamınızı kurmak için Ortamı kurma , Hedef seçme ve Kodu oluşturma bölümlerindeki 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 tablo en sık kullanılan bağımsız değişkenleri listeler. Tam bir liste atest --help aracılığıyla edinilebilir.

Seçenek Uzun seçenek Açıklama
-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 ayırma ve temizlemeyi devre dışı bırakır.
--info Belirtilen hedeflerle ilgili bilgileri gösterir ve çıkar.
--dry-run Gerçekte test oluşturmadan, kurmadan veya çalıştırmadan Atest'i prova eder.
-m --rebuild-module-info module-info.json dosyasını yeniden oluşturmaya zorlar.
-w --wait-for-debugger Çalıştırmadan önce hata ayıklayıcının bitmesini bekler.
-v --verbose DEBUG düzeyinde günlüğe kaydetmeyi görüntüler.
--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] Geçilene 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 sanal cihaz üzerinde testler gerçekleştirir.
--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 tamamen ana bilgisayarda cihaz olmadan çalıştırır.
Not: --host olan bir cihaz gerektiren bir host testi çalıştırmak 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ı belirtin: 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 çok teste yapılan referansları boşluklarla ayırın, örneğin:

atest test-identifier-1 test-identifier-2

Modül Adı

Test modülünün tamamını çalıştırmak için modül adını kullanın. Söz konusu testin Android.mk veya Android.bp dosyasındaki LOCAL_MODULE veya LOCAL_PACKAGE_NAME değişkenlerinde görünen adı 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. 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ı

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ş (modül olmayan) testleri çalıştırmak için, adı tradefed.sh list configs komutunun çıktısında göründüğü gibi 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, uygun şekilde test dosyasına veya dizinine giden yolu 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ı çalıştırmayı da destekler. Hem göreli hem de mutlak yollar desteklenir.

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

Aşağıdaki örnekler, bir dosya yolu kullanarak CtsVideoTestCases modülünü çalıştırmanın iki yolunu gösterir.

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, bir dosya yolu kullanarak CtsVideoTestCases modülü içinde belirli bir sınıfın nasıl çalıştırılacağını gösterir.

Android repo-root :

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

Bir entegrasyon testi çalıştırın

Aşağıdaki örnek, Android repo-root bir dosya yolu 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: Derleyin, kurun 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ışır.

  • Yalnızca hedef oluşturun: atest -b test-to-run
  • Yalnızca testleri çalıştır: atest -t test-to-run
  • Apk yükleyin ve testleri çalıştırın: atest -it test-to-run
  • Derleyin ve çalıştırın, ancak kurmayın: atest -bt test-to-run

Atest, bir testi temizleme veya sökme adımını atlamaya zorlayabilir. CTS gibi birçok test, test çalıştırıldıktan sonra cihazı temizler, bu nedenle -t ile testinizi yeniden çalıştırmaya çalışmak --disable-teardown parametresi olmadan başarısız olur. Test temizleme adımını atlamak ve yinelemeli 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, 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, sınıfı tanımlamak için desteklenen yollardan herhangi birini kullanarak sınıfı tanımlayın (Modül:Sınıf, dosya yolu vb.) ve yöntemin adını ekleyin:

atest reference-to-class#method1

Birden çok 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, testFlagChange adlı tek bir yöntemi çalıştırmanın tercih edilen yollarını göstermektedir. Modülün veya Java dosya konumunun belirtilmesi, Atest'in testi çok daha hızlı bulmasını sağladığından, bu örnekler yalnızca sınıf adının kullanılmasına tercih edilir.

Modülü Kullanma: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 çok yöntem çalıştırılabilir:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Birden çok sınıf çalıştırma

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, bu nedenle bir modülde sınıfların bir alt kümesini belirtmek, tüm modülü çalıştırma performansını artırır.

Aynı modülde iki sınıfı ç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 üzere -a kullanın.

Örnek giriş testi:

atest -a libinput_tests inputflinger_tests

Çalıştırılacak belirli bir GTest ikili dosyasını seçmek için, test adını belirtmek için 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ğıdakini çalıştırın:

atest inputflinger_tests:InputDispatcherTest

Veya aşağıdakini kullanarak bireysel bir test çalıştırın:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Testleri TEST_MAPPING içinde çalıştır

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

Ön gönderim testlerini dolaylı olarak çalıştırın

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

atest

/path/to/project içindeki TEST_MAPPING dosyalarında ve üst dizinlerinde gönderme öncesi testleri çalıştırın:

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

Belirli 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önderme 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önderme sonrası testleri çalıştırın:

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

Ana hat testlerini /path/to/project içindeki TEST_MAPPING dosyalarında ve üst dizinlerinde çalıştırın:

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

Alt dizinlerdeki testleri çalıştırın

Varsayılan olarak, Atest yalnızca TEST_MAPPING dosyalarındaki testleri 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

Yinelemede testleri çalıştırın

--iterations bağımsız değişkenini ileterek testleri yinelemede çalıştırın. Geçse de geçmese de Atest, maksimum iterasyona ulaşılana kadar testi tekrarlayacaktır.

Örnekler:

Atest varsayılan olarak 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, lapa lapa testlerin tespit edilmesini 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 başarısızlık meydana geldiğinde veya yineleme 10. tura (varsayılan olarak) ulaştığında durdurun.
    atest test-to-run --rerun-until-failure
    
  • Bir başarısızlık meydana geldiğinde veya yineleme 100. tura ulaştığında durdurun.
    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 testleri çalıştırın.

  • test-to-run 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 geçene kadar çalıştırın.
    atest test-to-run --retry-any-failure
    
  • Geçtiğinde veya 100. turu geçtiğinde başarısız olan testi çalıştırmayı 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 yapabilir. Bir AVD oluşturmak ve yapıtlar 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 iletebilir. 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çenek biçimini izlediğinden emin olun.

atest test-to-run -- [CUSTOM_ARGS]

Test yapılandırma dosyasında tanımlanan hazırlayıcıları veya test çalıştırıcıları hedeflemek için 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

Salt test seçenekleri hakkında daha fazla bilgi için bkz. Seçenekleri modüllere geçirme .