Atest adalah alat baris perintah yang memungkinkan pengguna untuk membangun, menginstal, dan menjalankan pengujian Android secara lokal, sangat mempercepat pengujian ulang tanpa memerlukan pengetahuan tentang opsi baris perintah harness uji Trade Federation . Halaman ini menjelaskan cara menggunakan Atest untuk menjalankan pengujian Android.
Untuk informasi umum tentang pengujian penulisan untuk Android, lihat Pengujian Platform Android .
Untuk informasi tentang keseluruhan struktur Atest, lihat Panduan Pengembang Atest .
Untuk informasi tentang menjalankan pengujian dalam file TEST_MAPPING melalui Atest, lihat Menjalankan pengujian dalam file TEST_MAPPING .
Untuk menambahkan fitur ke Atest, ikuti Alur Kerja Pengembang Atest .
Menyiapkan lingkungan Anda
Ikuti langkah-langkah di bagian berikut untuk menyiapkan lingkungan Atest Anda.
Setel variabel lingkungan
Setel test_suite
untuk Soong atau LOCAL_COMPATIBILITY_SUITE
untuk Buat aturan skrip pembuatan Kemasan berikut.
Jalankan envsetup.sh
Dari root checkout sumber Android, jalankan:
source build/envsetup.sh
Jalankan lunch
Jalankan perintah lunch
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 ke $PATH
Anda.
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 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. |
<c> | --info | Menampilkan info relevan tentang target yang ditentukan, lalu keluar. |
<c> | --dry-run | Dry-runs Atest tanpa benar-benar membangun, menginstal, atau menjalankan tes. |
-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. |
<c> | --iterations | Pengujian loop-run sampai iterasi maksimum tercapai. (10 secara default) |
<c> | --rerun-until-failure [COUNT=10] | Jalankan ulang semua tes sampai terjadi kegagalan atau iterasi maksimal tercapai. (10 secara default) |
<c> | --retry-any-failure [COUNT=10] | Menjalankan kembali tes yang gagal hingga lulus atau iterasi maksimal tercapai. (10 secara default) |
<c> | --start-avd | Secara otomatis membuat AVD dan menjalankan pengujian pada perangkat virtual. |
<c> | --acloud-create | Membuat AVD menggunakan perintah acloud . |
<c> | --[CUSTOM_ARGS] | Menentukan argumen khusus untuk runner pengujian. |
-a | --all-abi | Menjalankan pengujian untuk semua arsitektur perangkat yang tersedia. |
<c> | --host | Menjalankan pengujian sepenuhnya pada host tanpa perangkat. Catatan: Menjalankan pengujian host yang memerlukan perangkat dengan --host akan gagal. |
<c> | --flakes-info | Menampilkan hasil tes dengan info serpihan. |
<c> | --history | Menampilkan hasil tes dalam urutan kronologis. |
<c> | --latest-result | Mencetak hasil tes terbaru. |
Untuk informasi lebih lanjut tentang -b
, -i
dan -t
, lihat bagian Menentukan langkah: membangun, menginstal, atau menjalankan .
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 berkas
- Nama paket
Pisahkan referensi ke beberapa pengujian 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 sebuah modul, gunakan Module:Class . Modul sama seperti yang dijelaskan dalam Nama modul . Kelas adalah nama kelas uji dalam file .java
, dan dapat berupa nama kelas yang sepenuhnya 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 secara eksplisit menyatakan nama modul, 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 berkas
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. Kedua jalur relatif dan absolut didukung.
Jalankan modul
Contoh berikut menunjukkan dua cara untuk menjalankan modul CtsVideoTestCases
menggunakan jalur file.
Jalankan dari repo-root
Android:
atest cts/tests/video
Jalankan dari Android repo-root/cts/tests/video
:
atest .
Jalankan kelas tes
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 uji 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: Bangun, instal, atau jalankan
Gunakan opsi -b
, -i
, dan -t
untuk menentukan langkah mana yang harus dijalankan. Jika Anda tidak menentukan opsi, maka semua langkah akan dijalankan.
- Hanya membangun target:
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 instal:
atest -bt test-to-run
Atest dapat memaksa tes untuk melewati langkah pembersihan atau pembongkaran. Banyak pengujian, seperti CTS, membersihkan perangkat setelah pengujian dijalankan, jadi mencoba menjalankan ulang pengujian Anda dengan -t
akan gagal tanpa parameter --disable-teardown
. Gunakan -d
sebelum -t
untuk melewati langkah pembersihan tes dan tes 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 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
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 menemukan tes 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 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.
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 yang akan dijalankan, gunakan titik dua (:) untuk menentukan nama pengujian, dan tagar (#) untuk menentukan metode individual lebih lanjut.
Misalnya, untuk definisi pengujian berikut:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Jalankan yang berikut ini untuk menentukan seluruh pengujian:
atest inputflinger_tests:InputDispatcherTest
Atau jalankan tes individu menggunakan yang berikut:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Jalankan pengujian di TEST_MAPPING
Atest dapat menjalankan tes dalam file TEST_MAPPING
.
Jalankan tes prakirim secara implisit
Jalankan tes TEST_MAPPING
di direktori saat ini dan direktori induk:
atest
Jalankan tes 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 direktori induk:
atest :postsubmit
Jalankan pengujian 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 pengujian jalur 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 tes di file TEST_MAPPING ke atas (dari direktori saat ini atau yang diberikan ke direktori induknya). Jika Anda juga ingin menjalankan tes dalam file TEST_MAPPING di sub-direktori, gunakan --include-subdirs
untuk memaksa Atest menyertakan tes tersebut juga:
atest --include-subdirs /path/to/project
Jalankan tes dalam iterasi
Jalankan pengujian dalam iterasi dengan meneruskan argumen --iterations
. Apakah lolos atau gagal, Atest akan mengulang pengujian sampai iterasi maksimal tercapai.
Contoh:
Secara default, Atest iterasi 10 kali. Jumlah iterasi harus bilangan bulat positif.
atest test-to-run --iterations
atest test-to-run --iterations 5
Pendekatan berikut memudahkan untuk 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 beberapa kasus uji dan salah satu pengujian gagal. Jalankan hanya tes yang gagal 10 kali (secara default) 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
Jalankan pengujian pada AVD
Atest dapat menjalankan pengujian pada AVD yang baru dibuat. Jalankan acloud create
untuk membuat AVD dan membuat 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 persiapan target atau runner 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
Berikan opsi ke tipe 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 Lulus opsi ke modul .