Ini adalah pengantar singkat tentang pemetaan pengujian dan penjelasan tentang cara memulai mengonfigurasi pengujian di Android Open Source Project (AOSP).
Tentang pemetaan pengujian
Pemetaan pengujian adalah pendekatan berbasis Gerrit yang memungkinkan developer membuat pra-
dan aturan pengujian pasca-pengiriman secara langsung di hierarki sumber Android dan membiarkan
keputusan cabang dan perangkat
yang akan diuji untuk infrastruktur pengujian.
Definisi pemetaan pengujian adalah file JSON bernama TEST_MAPPING
yang dapat Anda
di direktori sumber mana pun.
Atest dapat menggunakan file TEST_MAPPING
untuk menjalankan pengujian prapengiriman di
direktori yang terkait. Dengan pemetaan pengujian, Anda dapat menambahkan set pengujian yang sama ke
pemeriksaan pra-pengiriman dengan perubahan minimal di dalam struktur sumber Android.
Lihat contoh berikut:
Menambahkan pengujian pra-pengiriman ke
TEST_MAPPING
untukservices.core
Menambahkan pengujian pra-pengiriman ke
TEST_MAPPING
untuktools/dexter
menggunakan impor
Pemetaan pengujian bergantung pada Test Harness Federasi Perdagangan (TF) untuk eksekusi uji dan pelaporan hasil.
Menentukan grup pengujian
Uji pengujian grup pemetaan dengan grup pengujian. Nama grup pengujian dapat berupa string apa pun. Misalnya, presubmit dapat menjadi nama untuk grup pengujian untuk dijalankan saat memvalidasi perubahan. Selain itu, postsubmit dapat menjadi pengujian yang digunakan untuk memvalidasi build setelah perubahan digabungkan.
Aturan skrip build paket
Agar test harness Federasi Perdagangan
agar dapat menjalankan modul pengujian untuk build tertentu, modul ini harus memiliki
test_suites
ditetapkan untuk set Soong atau LOCAL_COMPATIBILITY_SUITE
untuk Make pada salah satu dari dua suite ini:
general-tests
ditujukan untuk pengujian yang tidak bergantung pada kemampuan khusus perangkat (seperti hardware khusus vendor yang tidak dimiliki sebagian besar perangkat). Sebagian besar pengujian harus berada dalam suitegeneral-tests
, meskipun pengujian tersebut khusus untuk satu ABI atau bitness atau fitur perangkat keras seperti HWASan (ada targettest_suites
terpisah untuk setiap ABI), dan meskipun harus menjalankan di perangkat.device-tests
ditujukan untuk pengujian yang bergantung pada kemampuan khusus perangkat. Biasanya pengujian ini ditemukan di bagianvendor/
. Khusus perangkat hanya mengacu pada kemampuan unik untuk sebuah perangkat, sehingga hal ini berlaku ke pengujian JUnit serta pengujian GTest (yang biasanya harus ditandai sebagaigeneral-tests
meskipun khusus ABI).
Contoh:
Android.bp: test_suites: ["general-tests"],
Android.mk: LOCAL_COMPATIBILITY_SUITE := general-tests
Mengonfigurasi pengujian untuk dijalankan di rangkaian pengujian
Agar pengujian dapat berjalan di dalam rangkaian pengujian, pengujian tersebut harus:
- Tidak boleh memiliki penyedia build.
- Harus dibersihkan setelah selesai, misalnya, dengan menghapus sementara file yang dibuat selama pengujian.
- Harus mengubah setelan sistem ke nilai default atau asli.
Tidak boleh mengasumsikan perangkat dalam status tertentu, misalnya, siap root. Sebagian besar pengujian tidak memerlukan hak istimewa root untuk dijalankan. Jika pengujian harus mensyaratkan root, harus menentukan bahwa dengan
RootTargetPreparer
AndroidTest.xml
, seperti dalam contoh berikut:<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
Membuat file pemetaan pengujian
Untuk direktori yang memerlukan cakupan pengujian, tambahkan file JSON TEST_MAPPING
menyerupai contoh. Aturan ini memastikan bahwa pengujian berjalan dalam
prapengiriman pemeriksaan ketika ada file yang
disentuh dalam direktori itu atau salah satu
subdirektori.
Ikuti contoh
Berikut contoh file TEST_MAPPING
(dalam format JSON, tetapi dengan komentar
didukung):
{
"presubmit": [
// JUnit test with options and file patterns.
{
"name": "CtsWindowManagerDeviceTestCases",
"options": [
{
"include-annotation": "android.platform.test.annotations.RequiresDevice"
}
],
"file_patterns": ["(/|^)Window[^/]*\\.java", "(/|^)Activity[^/]*\\.java"]
},
// Device-side GTest with options.
{
"name" : "hello_world_test",
"options": [
{
"native-test-flag": "\"servicename1 servicename2\""
},
{
"native-test-timeout": "6000"
}
]
}
// Host-side GTest.
{
"name" : "net_test_avrcp",
"host" : true
}
],
"postsubmit": [
{
"name": "CtsDeqpTestCases",
"options": [
{
// Use regex in include-filter which is supported in AndroidJUnitTest
"include-filter": "dEQP-EGL.functional.color_clears.*"
}
]
}
],
"imports": [
{
"path": "frameworks/base/services/core/java/com/android/server/am"
}
]
}
Menetapkan atribut
Dalam contoh, presubmit
dan postsubmit
adalah nama masing-masing
grup pengujian. Lihat Menentukan grup pengujian untuk mengetahui informasi selengkapnya
tentang grup pengujian.
Anda dapat menetapkan nama modul pengujian atau pengujian integrasi Trade Federation
nama (jalur resource ke file XML pengujian, misalnya,
uiautomator/uiautomator-demo
)
pada nilai atribut name
. Perhatikan bahwa kolom name
tidak dapat
gunakan class name
atau metode pengujian name
. Untuk mempersempit pengujian yang akan dijalankan,
gunakan opsi seperti include-filter
. Lihat
(Contoh penggunaan include-filter
).
Setelan host
pengujian menunjukkan apakah pengujian tersebut adalah pengujian tanpa perangkat
yang berjalan di host atau tidak. Nilai defaultnya adalah false
, yang berarti pengujian
memerlukan perangkat untuk dijalankan. Jenis pengujian yang didukung adalah
HostGTest
untuk
biner GTest dan HostTest
untuk pengujian
JUnit.
Atribut file_patterns
memungkinkan Anda menetapkan daftar string ekspresi reguler
untuk mencocokkan jalur relatif dari setiap file kode sumber (relatif terhadap
direktori yang berisi file TEST_MAPPING
). Dalam contoh,
pengujian CtsWindowManagerDeviceTestCases
berjalan di pra-pengiriman hanya ketika file Java
dimulai dengan Window
atau Activity
, yang ada di direktori yang sama dengan
TEST_MAPPING
atau subdirektorinya apa pun telah diubah.
Garis miring terbalik `` harus di-escape karena berada dalam file JSON.
Atribut imports
memungkinkan Anda menyertakan pengujian dalam file TEST_MAPPING
lainnya
tanpa menyalin kontennya. File TEST_MAPPING
di direktori induk
jalur yang diimpor juga disertakan. Pemetaan pengujian memungkinkan
impor bersarang; ini berarti dua file TEST_MAPPING
dapat saling mengimpor, dan
pemetaan pengujian dapat menggabungkan pengujian yang disertakan.
Atribut options
berisi opsi command line Tradefed tambahan.
Untuk mendapatkan daftar lengkap opsi yang tersedia untuk pengujian tertentu, jalankan:
tradefed.sh run commandAndExit [test_module] --help
Rujuk ke Penanganan opsi di Tradefed untuk detail selengkapnya tentang cara kerja opsi.
Menjalankan pengujian dengan Atest
Untuk menjalankan aturan pengujian prapengiriman secara lokal:
- Buka direktori yang berisi file
TEST_MAPPING
. Jalankan perintah:
atest
Semua pengujian pra-pengiriman yang dikonfigurasi di TEST_MAPPING
file versi saat ini
dan direktori induknya
sedang dijalankan. Atest menemukan dan menjalankan dua pengujian
untuk pra-pengiriman (A dan B).
Ini adalah cara paling mudah untuk menjalankan pengujian pra-pengiriman dalam file TEST_MAPPING
di direktori kerja saat ini (CWD) dan direktori induk. Atest
menemukan dan menggunakan file TEST_MAPPING
di CWD dan semua induknya
direktori.
Menyusun kode sumber
Contoh ini menunjukkan cara mengonfigurasi file TEST_MAPPING
di seluruh
hierarki sumber:
src
├── project_1
│ └── TEST_MAPPING
├── project_2
│ └── TEST_MAPPING
└── TEST_MAPPING
Konten src/TEST_MAPPING
:
{
"presubmit": [
{
"name": "A"
}
]
}
Konten src/project_1/TEST_MAPPING
:
{
"presubmit": [
{
"name": "B"
}
],
"postsubmit": [
{
"name": "C"
}
],
"other_group": [
{
"name": "X"
}
]}
Konten src/project_2/TEST_MAPPING
:
{
"presubmit": [
{
"name": "D"
}
],
"import": [
{
"path": "src/project_1"
}
]}
Menentukan direktori target
Anda dapat menentukan direktori target untuk menjalankan pengujian pada file TEST_MAPPING
di
saat ini. Perintah berikut menjalankan dua pengujian (A, B):
atest --test-mapping src/project_1
Menjalankan aturan pengujian pasca-pengiriman
Anda juga dapat menggunakan perintah ini untuk menjalankan aturan pengujian pasca-pengiriman yang ditentukan di
TEST_MAPPING
di src_path
(default ke CWD) dan direktori induknya:
atest [--test-mapping] [src_path]:postsubmit
Hanya menjalankan pengujian yang tidak memerlukan perangkat
Anda dapat menggunakan opsi --host
agar Atest hanya menjalankan pengujian yang dikonfigurasikan
{i>host<i} yang tidak memerlukan perangkat. Tanpa opsi ini, Atest
menjalankan kedua tes,
mereka yang membutuhkan perangkat dan {i>theose<i}
yang berjalan di {i>host<i} dan tidak membutuhkan perangkat. Pengujian
dijalankan dalam dua suite terpisah:
atest [--test-mapping] --host
Identifikasi grup pengujian
Anda dapat menentukan grup pengujian dalam perintah Atest. Perintah berikut menjalankan
semua pengujian postsubmit
yang terkait dengan file dalam direktori src/project_1
, yang
hanya berisi satu pengujian (C).
Atau, Anda dapat menggunakan :all
untuk menjalankan semua pengujian, apa pun grupnya. Hal berikut
menjalankan empat tes (A, B, C, X):
atest --test-mapping src/project_1:all
Sertakan subdirektori
Secara default, menjalankan pengujian di TEST_MAPPING
dengan Atest hanya menjalankan pra-pengiriman
pengujian yang dikonfigurasi dalam file TEST_MAPPING
di CWD (atau
direktori tertentu) dan direktori induknya. Jika Anda ingin menjalankan pengujian di semua
TEST_MAPPING
di subdirektori, gunakan opsi --include-subdir
untuk
memaksa Atest untuk
menyertakan pengujian itu juga.
atest --include-subdir
Tanpa opsi --include-subdir
, Atest hanya menjalankan pengujian A. Dengan
Opsi --include-subdir
, Atest menjalankan dua pengujian (A, B).
Komentar tingkat baris didukung
Anda dapat menambahkan komentar format //
tingkat baris untuk menyempurnakan TEST_MAPPING
{i>file<i} dengan deskripsi pengaturan yang mengikutinya.
ATest dan Federasi Perdagangan
melakukan prapemrosesan TEST_MAPPING
ke format JSON yang valid tanpa komentar. Untuk mempertahankan
file JSON bersih, hanya komentar format //
level baris
didukung.
Contoh:
{
// For presubmit test group.
"presubmit": [
{
// Run test on module A.
"name": "A"
}
]
}