Menjalankan pengujian (Atest)

Atest adalah alat command line yang memungkinkan pengguna membuat, menginstal, dan menjalankan pengujian Android secara lokal, sehingga mempercepat penayangan ulang pengujian tanpa memerlukan pengetahuan tentang opsi command line Trade Federation test harness. Halaman ini menjelaskan cara menggunakan Atest untuk menjalankan pengujian Android.

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

Untuk mengetahui informasi tentang struktur keseluruhan Atest, lihat Panduan Developer Atest.

Untuk mengetahui informasi tentang cara menjalankan pengujian dalam file TEST_MAPPING melalui Atest, lihat Menjalankan pengujian dalam file TEST_MAPPING.

Untuk menambahkan fitur ke Atest, ikuti Alur Kerja Developer Atest.

Menyiapkan lingkungan

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

Penggunaan dasar

Perintah Atest menggunakan format berikut:

atest test-to-run [optional-arguments]

Argumen opsional

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

Opsi Opsi panjang Deskripsi
-b --build Membangun target pengujian. (default)
-i --install Menginstal artefak pengujian (APK) di perangkat. (default)
-t --test Menjalankan pengujian. (default)
-s --serial Menjalankan pengujian pada perangkat yang ditentukan. Satu perangkat dapat diuji dalam satu waktu.
-d --disable-teardown Menonaktifkan penghapusan dan pembersihan pengujian.
--dry-run Uji coba Atest tanpa benar-benar membangun, menginstal, atau menjalankan pengujian.
-m --rebuild-module-info Memaksa pembuatan ulang file module-info.json.
-w --wait-for-debugger Menunggu debugger selesai sebelum dieksekusi.
-v --verbose Menampilkan logging tingkat DEBUG.
--iterations Menjalankan pengujian loop hingga iterasi maksimum tercapai. (10 secara default)
--rerun-until-failure [COUNT=10] Menjalankan ulang semua pengujian hingga terjadi kegagalan atau iterasi maksimum tercapai. (10 secara default)
--retry-any-failure [COUNT=10] Menjalankan ulang pengujian yang gagal hingga lulus atau iterasi maksimum tercapai. (10 secara default)
--start-avd Membuat AVD secara otomatis dan menjalankan pengujian di perangkat virtual.
--acloud-create Membuat AVD menggunakan perintah acloud.
--[CUSTOM_ARGS] Menentukan argumen kustom untuk runner pengujian.
-a --all-abi Menjalankan pengujian untuk semua arsitektur perangkat yang tersedia.
--host Menjalankan pengujian sepenuhnya di host tanpa perangkat.
Catatan: Menjalankan pengujian host yang memerlukan perangkat dengan --host akan gagal.
--history Menampilkan hasil pengujian dalam urutan kronologis.
--latest-result Mencetak hasil pengujian terbaru.

Untuk mengetahui informasi selengkapnya tentang -b, -i, dan -t, lihat bagian Tentukan langkah-langkah: build, instal, atau jalankan.

Menentukan pengujian

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

  • Nama modul
  • Modul:Class
  • Nama class
  • Pengujian integrasi Tradefed
  • Jalur file
  • 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 dalam variabel LOCAL_MODULE atau LOCAL_PACKAGE_NAME di file Android.mk atau Android.bp pengujian tersebut.

Contoh:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modul:Class

Untuk menjalankan satu class dalam modul, gunakan Module:Class. Module sama seperti yang dijelaskan dalam Module name. Class adalah nama class pengujian dalam file .java, dan dapat berupa nama class yang sepenuhnya memenuhi syarat atau nama dasar.

Contoh:

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

Nama class

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

Contoh:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Pengujian integrasi Tradefed

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

Untuk menjalankan reboot.xml pengujian:

atest example/reboot

Untuk menjalankan native-benchmark.xml pengujian:

atest native-benchmark

Jalur file

Atest mendukung menjalankan pengujian berbasis modul dan pengujian berbasis integrasi dengan memasukkan jalur ke file atau direktori pengujiannya sesuai kebutuhan. Alat ini juga mendukung menjalankan satu class dengan menentukan jalur ke file Java class. Jalur relatif dan absolut didukung.

Menjalankan 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 .

Menjalankan class pengujian

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

Dari Android repo-root:

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

Menjalankan uji integrasi

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

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

Nama paket

Atest mendukung penelusuran pengujian berdasarkan nama paket.

Contoh:

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

Tentukan langkah-langkah: Build, instal, atau jalankan

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

  • Hanya target build: atest -b test-to-run
  • Hanya jalankan pengujian: atest -t test-to-run
  • Instal APK dan jalankan pengujian: atest -it test-to-run
  • Build dan jalankan, tetapi jangan instal: atest -bt test-to-run

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

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

Menjalankan metode tertentu

Atest mendukung menjalankan metode tertentu dalam class pengujian. Meskipun seluruh modul perlu dibangun, hal ini mengurangi waktu yang diperlukan untuk menjalankan pengujian. Untuk menjalankan metode tertentu, identifikasi class menggunakan salah satu cara yang didukung untuk mengidentifikasi class (Module:Class, 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 lebih disukai untuk menjalankan satu metode, testFlagChange. Contoh ini lebih disukai daripada hanya menggunakan nama class karena dengan menentukan modul atau lokasi file Java, Atest dapat menemukan pengujian dengan lebih cepat.

Menggunakan Module:Class:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Dari Android repo-root:

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

Beberapa metode dapat dijalankan dari berbagai class dan modul:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Menjalankan beberapa kelas

Untuk menjalankan beberapa class, pisahkan dengan spasi dengan cara yang sama seperti saat menjalankan beberapa pengujian. Atest membangun dan menjalankan class secara efisien, sehingga menentukan subset class dalam modul akan meningkatkan performa dibandingkan menjalankan seluruh modul.

Untuk menjalankan dua class dalam modul yang sama:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

Untuk menjalankan dua class dalam modul yang berbeda:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

Menjalankan biner GTest

Atest dapat menjalankan biner 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 pengujian input:

atest -a libinput_tests inputflinger_tests

Untuk memilih biner GTest tertentu yang akan dijalankan, gunakan titik dua (:) untuk menentukan nama pengujian, dan tanda pagar (#) untuk menentukan metode individual lebih lanjut.

Misalnya, untuk definisi pengujian berikut:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Jalankan perintah berikut untuk menentukan seluruh pengujian:

atest inputflinger_tests:InputDispatcherTest

Atau jalankan pengujian individual menggunakan perintah berikut:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Menjalankan pengujian di TEST_MAPPING

Atest dapat menjalankan pengujian dalam file TEST_MAPPING.

Menjalankan pengujian sebelum pengiriman secara implisit

Menjalankan pengujian pra-submit dalam file TEST_MAPPING di direktori saat ini dan induk:

atest

Jalankan pengujian pra-kirim dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Menjalankan grup pengujian tertentu

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

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

atest :postsubmit

Menjalankan pengujian dari semua grup dalam file TEST_MAPPING:

atest :all

Menjalankan pengujian postsubmit dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Menjalankan pengujian utama dalam file TEST_MAPPING di /path/to/project dan direktori induknya:

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

Menjalankan pengujian di subdirektori

Secara default, Atest hanya menelusuri 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

Menjalankan pengujian dalam iterasi

Jalankan pengujian dalam iterasi dengan meneruskan argumen --iterations. Baik berhasil maupun gagal, Atest akan mengulangi pengujian hingga iterasi maksimum tercapai.

Contoh:

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

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

Pendekatan berikut mempermudah pendeteksian pengujian yang tidak stabil:

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

  • Berhenti saat terjadi kegagalan atau iterasi mencapai putaran ke-10 (secara default).
    atest test-to-run --rerun-until-failure
    
  • Berhenti saat 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 kasus pengujian dan salah satu pengujian gagal. Jalankan hanya pengujian yang gagal sebanyak 10 kali (secara default) atau hingga pengujian lulus.
    atest test-to-run --retry-any-failure
    
  • Hentikan pengujian yang gagal saat pengujian lulus atau mencapai putaran ke-100.
    atest test-to-run --retry-any-failure 100
    

Menjalankan pengujian di AVD

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

Mulai AVD dan jalankan pengujian di AVD:

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

Mulai AVD sebagai bagian dari proses pengujian:

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

Untuk mengetahui informasi selengkapnya, jalankan acloud create --help.

Meneruskan opsi ke modul

Atest dapat meneruskan opsi ke modul pengujian. Untuk menambahkan opsi command line TradeFed ke proses pengujian, gunakan struktur berikut dan pastikan argumen kustom Anda mengikuti format opsi command line Tradefed.

atest test-to-run -- [CUSTOM_ARGS]

Teruskan opsi modul pengujian ke penyiapan target atau peluncuran 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

Teruskan opsi ke jenis atau class 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 mengetahui informasi selengkapnya tentang opsi khusus pengujian, lihat Meneruskan opsi ke modul.