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

Menjalankan Tes (Atest)

Atest adalah alat baris perintah yang memungkinkan pengguna membuat, menginstal, dan menjalankan pengujian Android secara lokal, sangat mempercepat pengujian ulang tanpa memerlukan pengetahuan tentang opsi baris perintah test harness Federasi Perdagangan . Halaman ini menjelaskan cara menggunakan Atest untuk menjalankan pengujian Android.

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

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

Untuk informasi tentang menjalankan pengujian di file TEST_MAPPING melalui Atest, lihat Menjalankan pengujian di file TEST_MAPPING .

Untuk menambahkan fitur ke Atest, ikuti Atest Developer Workflow .

Siapkan lingkungan Anda

Untuk menyiapkan lingkungan Atest Anda, ikuti petunjuk di Menyiapkan lingkungan , Memilih target , dan Menyusun kode .

Penggunaan dasar

Perintah Atest mengambil bentuk berikut:

atest test-to-run [optional-arguments]

Argumen opsional

Tabel berikut mencantumkan argumen yang paling umum digunakan. Daftar lengkap tersedia melalui atest --help .

Pilihan Opsi panjang Keterangan
-b --build Membangun target pengujian. (bawaan)
-i --install Menginstal artefak pengujian (APK) di 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 Nonaktifkan pengujian teardown dan pembersihan.
--info Menampilkan info yang relevan tentang target yang ditentukan, lalu keluar.
--dry-run Uji coba kering tanpa benar-benar membuat, menginstal, atau menjalankan pengujian.
-m --rebuild-module-info Memaksa pembuatan ulang file module-info.json .
-w --wait-for-debugger Menunggu debugger selesai sebelum dijalankan.
-v --verbose Menampilkan pencatatan tingkat DEBUG.
--iterations Tes loop-run hingga iterasi maksimum tercapai. (10 secara default)
--rerun-until-failure [COUNT=10] Jalankan kembali semua pengujian hingga terjadi kegagalan atau iterasi maksimal tercapai. (10 secara default)
--retry-any-failure [COUNT=10] Jalankan kembali tes yang gagal hingga lulus atau iterasi maksimum tercapai. (10 secara default)
--start-avd Secara otomatis membuat AVD dan menjalankan pengujian pada perangkat virtual.
--acloud-create Membuat AVD menggunakan perintah acloud .
--[CUSTOM_ARGS] Menentukan argumen khusus untuk runner pengujian.
-a --all-abi Menjalankan pengujian untuk semua arsitektur perangkat yang tersedia.
--host Jalankan pengujian sepenuhnya di host tanpa perangkat.
Catatan: Menjalankan pengujian host yang memerlukan perangkat dengan --host akan gagal.
--history Menunjukkan hasil tes dalam urutan kronologis.
--latest-result Mencetak hasil tes terbaru.

Untuk informasi lebih lanjut tentang -b , -i dan -t , lihat bagian Tentukan langkah-langkah: bangun, instal, atau jalankan .

Tentukan tes

Untuk menjalankan pengujian, tentukan satu atau beberapa pengujian menggunakan salah satu pengidentifikasi berikut:

  • Nama modul
  • Modul: Kelas
  • Nama kelas
  • Tes integrasi tradefed
  • Jalur file
  • Nama paket

Referensi terpisah untuk beberapa tes dengan spasi, seperti ini:

atest test-identifier-1 test-identifier-2

Nama modul

Untuk menjalankan seluruh modul pengujian, gunakan nama modulnya. Masukkan nama seperti yang muncul di variabel LOCAL_MODULE atau LOCAL_PACKAGE_NAME di file Android.mk atau Android.bp pengujian tersebut.

Contoh:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modul: Kelas

Untuk menjalankan satu kelas dalam modul, gunakan Module:Class . Module sama seperti yang dijelaskan di Module name . Kelas adalah nama kelas uji dalam file .java , dan bisa berupa nama kelas yang memenuhi syarat atau nama dasar.

Contoh:

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

Nama kelas

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

Contoh:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Tes integrasi tradefed

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

Untuk menjalankan tes reboot.xml :

atest example/reboot

Untuk menjalankan pengujian native-benchmark.xml :

atest native-benchmark

Jalur file

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

Jalankan modul

Contoh berikut menunjukkan dua cara untuk menjalankan modul CtsVideoTestCases menggunakan jalur file.

Jalankan dari Android repo-root :

atest cts/tests/video

Jalankan dari Android repo-root/cts/tests/video :

    atest .

Jalankan kelas uji

Contoh berikut menunjukkan cara menjalankan kelas tertentu dalam modul CtsVideoTestCases menggunakan jalur file.

Dari repo-root Android :

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

Jalankan tes integrasi

Contoh berikut menunjukkan cara menjalankan pengujian integrasi menggunakan jalur file dari repo-root Android :

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

Nama paket

Atest mendukung pencarian tes berdasarkan nama paket.

Contoh:

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

Tentukan langkah-langkah: Membangun, memasang, atau menjalankan

Gunakan opsi -b , -i , dan -t untuk menentukan langkah mana yang akan dijalankan. Jika Anda tidak menentukan opsi, maka semua langkah akan dijalankan.

  • Bangun target saja: atest -b test-to-run
  • Jalankan tes saja: atest -t test-to-run
  • Instal apk dan jalankan tes: atest -it test-to-run
  • Bangun dan jalankan, tetapi jangan pasang: atest -bt test-to-run

Atest dapat memaksa pengujian untuk melewati langkah pembersihan atau pembongkaran. Banyak pengujian, seperti CTS, membersihkan perangkat setelah pengujian dijalankan, jadi mencoba menjalankan kembali pengujian Anda dengan -t akan gagal tanpa parameter --disable-teardown . Gunakan -d sebelum -t untuk melewatkan langkah pembersihan tes dan menguji secara iteratif.

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

Menjalankan metode tertentu

Atest mendukung menjalankan metode tertentu dalam kelas pengujian. Meskipun seluruh modul perlu dibuat, hal ini mengurangi waktu yang diperlukan untuk menjalankan pengujian. 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

Saat menentukan beberapa metode, pisahkan 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 disukai untuk menjalankan satu metode, testFlagChange . Contoh-contoh ini lebih disukai daripada hanya menggunakan nama kelas karena menentukan modul atau lokasi file Java memungkinkan Atest untuk menemukan pengujian lebih cepat.

Menggunakan Modul:Kelas:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Dari repo-root Android :

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 beberapa kelas

Untuk menjalankan banyak 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 akan meningkatkan kinerja dibandingkan menjalankan seluruh modul.

Untuk menjalankan dua kelas dalam modul yang sama:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

Untuk menjalankan dua kelas dalam modul yang berbeda:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

Jalankan binari GTest

Atest dapat menjalankan binari GTest. Gunakan -a untuk menjalankan pengujian ini 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 biner GTest tertentu untuk dijalankan, gunakan titik dua (:) untuk menentukan nama tes, dan tagar (#) untuk menentukan lebih lanjut metode individual.

Misalnya, untuk definisi pengujian berikut:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Jalankan perintah berikut untuk menentukan keseluruhan pengujian:

atest inputflinger_tests:InputDispatcherTest

Atau jalankan pengujian individual menggunakan yang berikut ini:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Jalankan tes di TEST_MAPPING

Atest dapat menjalankan pengujian dalam file TEST_MAPPING .

Jalankan pengujian sebelum pengiriman secara implisit

Jalankan pengujian sebelum pengiriman dalam file TEST_MAPPING di direktori saat ini dan direktori induk:

atest

Jalankan pengujian sebelum pengiriman dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Jalankan grup pengujian yang ditentukan

Grup pengujian yang tersedia adalah: presubmit (default), postsubmit , mainline-presubmit , dan all .

Jalankan tes postsubmit dalam file TEST_MAPPING di direktori saat ini dan induk:

atest :postsubmit

Jalankan tes dari semua grup dalam file TEST_MAPPING:

atest :all

Jalankan tes postsubmit dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Jalankan tes arus utama dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Jalankan tes di sub-direktori

Secara default, Atest hanya mencari pengujian dalam file TEST_MAPPING ke atas (dari direktori saat ini atau yang diberikan ke direktori induknya). Jika Anda juga ingin menjalankan pengujian dalam file TEST_MAPPING di subdirektori, gunakan --include-subdirs untuk memaksa Atest menyertakan pengujian tersebut juga:

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

Jalankan tes dalam iterasi

Jalankan tes dalam iterasi dengan meneruskan argumen --iterations . Apakah lulus atau gagal, Atest akan mengulang pengujian hingga iterasi maksimal tercapai.

Contoh:

Secara default, Atest mengulang 10 kali. Jumlah iterasi harus bilangan bulat positif.

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

Pendekatan berikut memudahkan untuk mendeteksi pengujian yang tidak stabil:

Pendekatan 1: Jalankan semua pengujian hingga terjadi kegagalan atau iterasi maksimal tercapai.

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

Pendekatan 2: Jalankan hanya pengujian yang gagal hingga lulus atau iterasi maksimum tercapai.

  • Asumsikan test-to-run memiliki beberapa test case dan salah satu test gagal. Jalankan hanya pengujian yang gagal sebanyak 10 kali (secara default) atau hingga pengujian berhasil.
    atest test-to-run --retry-any-failure
    
  • Berhenti menjalankan tes yang gagal saat melewati atau mencapai putaran ke-100.
    atest test-to-run --retry-any-failure 100
    

Jalankan tes pada AVD

Atest dapat menjalankan pengujian pada AVD yang baru dibuat. Jalankan acloud create untuk membuat AVD dan membangun artefak, lalu gunakan contoh berikut untuk menjalankan pengujian Anda.

Mulai AVD dan jalankan tes di atasnya:

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

Mulai AVD sebagai bagian dari uji coba:

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

Untuk informasi lebih lanjut, jalankan acloud create --help .

Berikan opsi ke modul

Atest dapat memberikan opsi untuk menguji modul. Untuk menambahkan opsi baris perintah TradeFed ke uji coba Anda, gunakan struktur berikut dan pastikan argumen khusus Anda mengikuti format opsi baris perintah Tradefed.

atest test-to-run -- [CUSTOM_ARGS]

Lewati opsi modul pengujian ke pembuat target 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

Meneruskan opsi ke jenis atau kelas pelari:

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 opsi uji-saja, lihat Opsi teruskan ke modul .