Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Sebuah tes

Atest adalah alat baris perintah yang memungkinkan pengguna untuk membangun, menginstal, dan menjalankan tes Android lokal, sangat mempercepat tes kembali berjalan tanpa memerlukan pengetahuan Federasi Perdagangan memanfaatkan uji opsi baris perintah. Halaman ini menjelaskan cara menggunakan Atest untuk menjalankan pengujian Android.

Untuk informasi umum tentang menulis tes untuk Android, lihat Android Platform Pengujian .

Untuk informasi tentang struktur keseluruhan atest, lihat Panduan Pengembang atest .

Untuk informasi tentang menjalankan tes di file TEST_MAPPING melalui atest, lihat Menjalankan tes dalam file TEST_MAPPING .

Dan untuk menambahkan fitur untuk atest, ikuti atest Developer Workflow .

Menyiapkan lingkungan Anda

Untuk menjalankan Atest, ikuti langkah-langkah di bagian di bawah ini untuk menyiapkan lingkungan Anda.

Setel variabel lingkungan

Set test_suite untuk Soong atau LOCAL_COMPATIBILITY_SUITE untuk Membuat per Kemasan aturan membangun script .

Jalankan envsetup.sh

Dari root checkout sumber Android, jalankan:

source build/envsetup.sh

Jalankan makan siang

Jalankan lunch perintah untuk membuka menu perangkat yang didukung. Temukan perangkat dan jalankan perintah itu.

Misalnya, jika Anda memiliki perangkat ARM yang terhubung, jalankan perintah berikut:

lunch aosp_arm64-eng

Ini menetapkan berbagai variabel lingkungan yang diperlukan untuk menjalankan atest dan menambahkan perintah atest untuk Anda $PATH .

Penggunaan dasar

Perintah Atest mengambil bentuk berikut:

atest test-to-run [optional-arguments]

Argumen opsional

Di bawah ini adalah argumen yang paling umum digunakan. Sebuah daftar lengkap tersedia melalui atest --help .

Pilihan Opsi panjang Keterangan
-b --build Membangun target pengujian. (bawaan)
-i --install Menginstal artefak uji (APK) pada perangkat. (bawaan)
-t --test Menjalankan tes. (bawaan)
-s --serial Menjalankan pengujian pada perangkat yang ditentukan. Satu perangkat dapat diuji pada satu waktu.
-d --disable-teardown Menonaktifkan pengujian teardown dan pembersihan.
--info Menunjukkan info yang relevan dari target yang ditentukan dan keluar.
--dry-run Uji coba kering tanpa membangun, memasang, dan menjalankan pengujian secara aktual
-m --rebuild-module-info Pasukan membangun kembali dari module-info.json berkas.
-w --wait-for-debugger Menunggu debugger sebelum dieksekusi. Hanya untuk tes instrumentasi.
-v --verbose Menampilkan pencatatan tingkat DEBUG.
--iterations Pengujian loop-run sampai iterasi maksimum tercapai. (10 secara default)
--rerun-until-failure [COUNT=10] Jalankan ulang semua tes sampai terjadi kegagalan atau iterasi maksimal tercapai. (10 secara default)
--retry-any-failure [COUNT=10] Menjalankan kembali tes yang gagal hingga lulus atau iterasi maksimal tercapai. (10 secara default)
--start-avd Secara otomatis membuat AVD dan menjalankan pengujian pada perangkat virtual.
--acloud-create Menciptakan AVDs menggunakan acloud command.
--[CUSTOM_ARGS] Menentukan argumen khusus untuk runner pengujian.
-a --all-abi Menjalankan pengujian untuk semua arsitektur perangkat yang tersedia.
--host Menjalankan pengujian sepenuhnya pada host tanpa perangkat.
(Catatan: Menjalankan tes host yang membutuhkan perangkat dengan --host akan gagal.)
--flakes-info Menampilkan hasil tes dengan info serpihan.
--history Menampilkan hasil tes dalam urutan kronologis.
--latest-result Mencetak hasil tes terbaru.

Untuk informasi lebih lanjut tentang -b , -i dan -t , lihat Menentukan langkah-langkah: membangun, menginstal, atau lari.

Tes untuk dijalankan

Anda dapat menjalankan satu atau lebih tes menggunakan test-to-run . Untuk menjalankan beberapa pengujian, pisahkan referensi pengujian dengan spasi. Sebagai contoh:

atest test-to-run-1 test-to-run-2

Berikut beberapa contohnya:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

Untuk informasi lebih lanjut tentang cara untuk referensi tes, lihat Mengidentifikasi tes.

Mengidentifikasi tes

Anda dapat menentukan test-to-run argumen dengan nama tes ini modul, Modul: Kelas, nama kelas, uji integrasi TF, path file atau nama paket.

Nama modul

Untuk menjalankan seluruh modul pengujian, gunakan nama modulnya. Masukan nama seperti yang muncul dalam LOCAL_MODULE atau LOCAL_PACKAGE_NAME variabel dalam bahwa tes ini Android.mk atau Android.bp berkas.

Contoh:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modul: Kelas

Untuk menjalankan satu kelas dalam sebuah modul, menggunakan Modul: Class. Modul adalah sama seperti yang dijelaskan dalam nama modul . Kelas adalah nama kelas uji di .java berkas dan dapat menjadi memenuhi syarat nama kelas atau nama dasar.

Contoh:

atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest CtsVideoTestCases:VideoEncoderDecoderTest

Nama kelas

Untuk menjalankan satu kelas tanpa secara eksplisit menyatakan nama modul, gunakan nama kelas.

Contoh:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Menggunakan Modul: referensi Kelas dianjurkan bila memungkinkan karena atest membutuhkan lebih banyak waktu untuk mencari pohon sumber lengkap untuk pertandingan potensial jika ada modul dinyatakan.

Contoh (diurutkan dari yang tercepat ke yang paling lambat):

atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest FrameworksServicesTests:ScreenDecorWindowTests
atest ScreenDecorWindowTests

Tes integrasi TF

Untuk menjalankan tes yang terintegrasi langsung ke TradeFed (non-modul), masukan nama seperti yang muncul dalam output dari tradefed.sh list configs perintah. Sebagai contoh:

Untuk menjalankan reboot.xml tes :

atest example/reboot

Untuk menjalankan native-benchmark.xml uji :

atest native-benchmark

Jalur berkas

Anda dapat menjalankan pengujian berbasis modul dan pengujian berbasis integrasi dengan memasukkan jalur ke file atau direktori pengujian yang sesuai. Anda juga dapat menjalankan satu kelas dengan menentukan jalur ke file Java kelas tersebut. Jalur relatif dan absolut didukung.

Contoh: Dua cara untuk menjalankan CtsVideoTestCases modul melalui jalur

  1. Jalankan modul dari Android repo-root :

    atest cts/tests/video
    
  2. Dari Android repo-root / cts / tes / video:

    atest .
    

Contoh: Jalankan kelas tertentu dalam CtsVideoTestCases modul melalui jalur. Dari Android repo-root :

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

Contoh: Jalankan uji integrasi melalui jalur. Dari Android repo-root :

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

Nama paket

Atest mendukung pengujian pencarian berdasarkan nama paket.

Contoh:

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

Menentukan langkah-langkah: Bangun, instal, atau jalankan

Anda dapat menentukan langkah untuk menjalankan dengan menggunakan -b , -i , dan -t pilihan. Jika Anda tidak menentukan opsi, maka semua langkah akan dijalankan.

  • Target membangun hanya: atest -b test-to-run
  • Tes hanya menjalankan: atest -t test-to-run
  • Install apk dan menjalankan tes: atest -it test-to-run
  • Membangun dan menjalankan, tetapi tidak menginstal: atest -bt test-to-run

Atest dapat memaksa pengujian untuk melewati langkah pembersihan/penghancuran. Banyak tes, seperti CTS, membersihkan perangkat setelah ujian dijalankan, jadi mencoba untuk mengulangi uji Anda dengan -t akan gagal tanpa --disable-teardown parameter. Gunakan -d sebelum -t untuk melewati tes bersih langkah dan uji iteratif.

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

Menjalankan metode tertentu

Anda dapat menjalankan metode tertentu dalam kelas pengujian. Meskipun seluruh modul perlu dibangun, ini mengurangi waktu yang dibutuhkan untuk menjalankan tes. Untuk menjalankan metode tertentu, identifikasi kelas menggunakan salah satu cara yang didukung untuk mengidentifikasi kelas (Modul: Kelas, jalur file, dll) dan tambahkan nama metode.

atest reference-to-class#method1

Anda dapat menentukan beberapa metode dengan koma.

atest reference-to-class#method1,method2,method3

Contoh:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Dua contoh berikut menunjukkan cara yang lebih disukai untuk menjalankan metode tunggal, testFlagChange . Contoh-contoh ini lebih disukai daripada hanya menggunakan nama kelas karena menentukan modul atau lokasi file Java memungkinkan Atest menemukan pengujian lebih cepat:

  1. Menggunakan Modul: Kelas

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. Dari Android repo-root

    atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
    

Beberapa metode dapat dijalankan dari kelas dan modul yang berbeda:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Menjalankan banyak kelas

Untuk menjalankan beberapa kelas, pisahkan dengan spasi dengan cara yang sama seperti menjalankan beberapa pengujian. Atest membangun dan menjalankan kelas secara efisien, jadi menentukan subset kelas dalam modul meningkatkan kinerja daripada menjalankan seluruh modul.

Contoh:

  • Dua kelas dalam modul yang sama:

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • Dua kelas dalam modul yang berbeda:

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

Menjalankan tes asli

Atest dapat menjalankan pengujian asli. Gunakan -a untuk menjalankan tes untuk semua arsitektur perangkat yang tersedia, yang dalam contoh ini adalah armeabi-V7A (ARM 32-bit) dan arm64-V8A (ARM 64-bit).

Contoh:

  • Tes masukan:

    atest -a libinput_tests inputflinger_tests
    

Untuk memilih pengujian asli tertentu yang akan dijalankan, gunakan titik dua (:) untuk menentukan nama pengujian dan tagar (#) untuk menentukan lebih lanjut metode individual. Sebagai contoh, untuk definisi tes berikut:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Anda dapat menjalankan seluruh tes menggunakan

atest inputflinger_tests:InputDispatcherTest

atau metode uji individu menggunakan

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Menjalankan tes di TEST_MAPPING

Atest dapat menjalankan tes dalam file TEST_MAPPING.

  1. Jalankan tes pra-pengiriman secara implisit dalam file TEST_MAPPING di direktori saat ini, induk, atau tertentu.

    Tes presubmit berjalan di file TEST_MAPPING di saat ini dan orang tua direktori:

    atest
    

    Tes presubmit berjalan di file TEST_MAPPING di /path/to/project dan direktori induknya:

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

  2. Jalankan kelompok uji yang ditentukan dalam TEST_MAPPING file; kelompok uji yang tersedia adalah: presubmit (default), postsubmit , mainline-presubmit dan all .

    • Tes postsubmit berjalan di file TEST_MAPPING di saat ini dan orang tua direktori:

      atest :postsubmit
      

    • Menjalankan tes dari semua kelompok dalam file TEST_MAPPING:

      atest :all
      

    • Tes postsubmit berjalan di file TEST_MAPPING di /path/to/project dan direktori induknya

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

    • Menjalankan tes arus utama dalam file TEST_MAPPING di /path/to/project dan direktori induknya

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

  3. Jalankan tes dalam file TEST_MAPPING termasuk sub-direktori.

Secara default, atest hanya mencari tes di file TEST_MAPPING ke atas (dari saat ini atau yang diberikan ke direktori induknya). Jika Anda juga ingin menjalankan tes di file TEST_MAPPING di sub-direktori, Anda dapat menggunakan opsi --include-subdirs untuk memaksa atest untuk memasukkan tes mereka juga.

Tes presubmit berjalan di file TEST_MAPPING di saat ini, orang tua dan sub-direktori:

atest --include-subdirs /path/to/project

Menjalankan tes dalam iterasi

Untuk menjalankan tes di iterasi, hanya lulus --iterations argumen. Apakah lolos atau gagal, pengujian tidak akan menghentikan pengujian sampai iterasi maksimal tercapai.

Contoh:

Secara default atest iterasi 10 kali, memberikan integer untuk mengubah putaran iterasi.

atest test-to-run --iterations
atest test-to-run --iterations 5

Dua pendekatan yang membantu pengguna mendeteksi tes yang tidak stabil:

Pendekatan 1: Jalankan semua tes sampai terjadi kegagalan atau iterasi maksimal tercapai.

  • Berhenti ketika terjadi kegagalan atau iterasi mencapai putaran ke-10 (secara default).
    atest test-to-run --rerun-until-failure
    
  • Berhenti ketika terjadi kegagalan atau iterasi mencapai putaran ke-100.
    atest test-to-run --rerun-until-failure 100
    

Pendekatan 2: Jalankan hanya tes yang gagal sampai lulus atau iterasi maksimal tercapai.

  • Asumsikan test-to-run memiliki lima kasus uji dan salah satu tes gagal. Jalankan hanya tes yang gagal 10 kali atau sampai tes lulus.
    atest test-to-run --retry-any-failure
    
  • Berhenti menjalankan tes yang gagal ketika lulus atau mencapai putaran ke-100.
    atest test-to-run --retry-any-failure 100
    

Menjalankan tes pada AVD

Atest dapat menjalankan pengujian dengan AVD yang baru dibuat. Atest dapat membangun artefak bersama dengan berjalan acloud create , dan menjalankan tes setelah AVD telah berhasil dibuat.

Contoh:

  • Memulai AVD sebelum menjalankan tes pada perangkat baru dibuat:

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

  • Mulai AVDs oleh specifing acloud create argumen dan menjalankan tes pada perangkat baru dibuat.

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

Untuk mendapatkan penggunaan rinci tentang argumen, menjalankan acloud create --help .

Berikan opsi ke modul

Atest dapat meneruskan opsi ke modul. Format singkat di baris perintah atest untuk menambahkan opsi TradeFed baris perintah adalah

atest test-to-run -- [CUSTOM_ARGS]
The [CUSTOM_ARGS] harus mengikuti perintah Tradefed format opsi baris.

Contoh melewati opsi modul pengujian untuk menargetkan pembuat atau pelari pengujian yang ditentukan dalam file konfigurasi pengujian:

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

Contoh penerusan opsi ke tipe atau kelas runner:

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

Untuk informasi lebih lanjut tentang tes-satunya pilihan, lihat opsi Pass ke modul