AOSP menyertakan template pengujian untuk modul pengujian yang bukan subclass Python sisi host dari BaseTest runner VTS.
Developer dapat menggunakan template ini untuk meminimalkan upaya yang diperlukan dalam mengintegrasikan pengujian tersebut. Bagian ini membahas cara mengonfigurasi dan menggunakan template pengujian (terletak di direktori testcases/template VTS) dan memberikan contoh untuk template yang umum digunakan.
Template BinaryTest
Gunakan template BinaryTest untuk mengintegrasikan pengujian yang dijalankan di perangkat target di VTS. Pengujian sisi target mencakup:
- Pengujian berbasis C++ yang dikompilasi dan di-push ke perangkat
- Pengujian Python sisi target yang dikompilasi sebagai biner
- Skrip shell yang dapat dieksekusi di perangkat
Pengujian ini dapat diintegrasikan ke dalam VTS dengan atau tanpa template BinaryTest.
Mengintegrasikan pengujian sisi target dengan template BinaryTest
Template BinaryTest dirancang untuk membantu developer mengintegrasikan
pengujian sisi target dengan mudah. Dalam sebagian besar kasus, Anda dapat menambahkan beberapa baris konfigurasi sederhana di AndroidTest.xml
. Contoh konfigurasi dari
VtsDeviceTreeEarlyMountTest:
<configuration description="Config for VTS VtsDeviceTreeEarlyMountTest."> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsDeviceTreeEarlyMountTest"/> <option name="binary-test-source" value="_32bit::DATA/nativetest/dt_early_mount_test/dt_early_mount_test" /> <option name="binary-test-source" value="_64bit::DATA/nativetest64/dt_early_mount_test/dt_early_mount_test" /> <option name="test-timeout" value="5m"/> </test> </configuration>
Dalam konfigurasi ini:
binary-test-source
danbinary-test-type
bersifat khusus template.- Menentukan jalur host relatif sumber biner pengujian memungkinkan template menangani persiapan, pengiriman file, eksekusi pengujian, penguraian hasil, dan pembersihan.
- Template ini berisi metode terkait pembuatan kasus pengujian untuk subclass yang akan diganti.
- Template mengasumsikan satu kasus pengujian per modul biner pengujian, dan nama file sumber biner digunakan sebagai nama kasus pengujian secara default.
Opsi konfigurasi
Template BinaryTest mendukung opsi konfigurasi berikut:
Nama opsi | Jenis nilai | Deskripsi |
---|---|---|
binary-test-source | string | Jalur sumber pengujian biner yang relatif terhadap direktori kasus pengujian vts di
host. Contoh: DATA/nativetest/test |
binary-test-working-directory | string | Direktori kerja (jalur sisi perangkat). Contoh: /data/local/tmp/testing/ |
binary-test-envp | string | Variabel lingkungan untuk biner. Contoh: PATH=/new:$PATH |
binary-test-args | string | Menguji argumen atau tanda. Contoh: --gtest_filter=test1 |
binary-test-ld-library-path | string | Variabel lingkungan LD_LIBRARY_PATH .Contoh: /data/local/tmp/lib |
binary-test-disable-framework | boolean | Jalankan adb stop untuk menonaktifkan Framework Android sebelum pengujian.
Contoh: true |
binary-test-stop-native-servers | boolean | Hentikan semua server native yang dikonfigurasi dengan benar selama pengujian. Contoh:
true |
binary-test-type | string | Jenis template. Jenis template lainnya diperluas dari template ini, tetapi Anda
tidak perlu menentukan opsi ini untuk template ini karena Anda sudah
menentukan binary-test-source . |
Untuk opsi dengan jenis nilai strings
, Anda dapat menambahkan beberapa nilai
dengan mengulangi opsi dalam konfigurasi. Misalnya, tetapkan
binary-test-source
dua kali (seperti yang ditunjukkan dalam
contoh VtsDeviceTreeEarlyMountTest
).
Menguji tag
Anda dapat menambahkan tag pengujian dengan menambahkan awalan ke opsi dengan nilai strings
dan menggunakan ::
sebagai pemisah. Tag pengujian sangat berguna
saat menyertakan sumber biner dengan nama yang sama, tetapi dengan
bitness atau direktori induk yang berbeda. Misalnya, untuk menghindari konflik nama hasil atau push file
untuk sumber dengan nama yang sama, tetapi dari direktori sumber yang berbeda,
Anda dapat menentukan tag yang berbeda untuk sumber ini.
Seperti yang ditunjukkan dalam contoh VtsDeviceTreeEarlyMountTest
dengan
dua sumber dt_early_mount_test
, tag pengujian adalah
awalan _32bit::
dan _64bit::
di
binary-test-source
. Tag yang diakhiri dengan 32bit
atau
64bit
akan otomatis menandai pengujian sebagai tersedia untuk satu bit ABI;
yaitu pengujian dengan tag _32bit
tidak dijalankan di ABI 64-bit. Tidak menentukan tag sama dengan menggunakan tag dengan string kosong.
Opsi dengan tag yang sama dikelompokkan dan diisolasi dari tag lainnya. Misalnya, binary-test-args
dengan tag _32bit
hanya
diterapkan ke binary-test-source
dengan tag yang sama dan dijalankan
di binary-test-working-directory
dengan tag yang sama. Opsi
binary-test-working-directory
bersifat opsional untuk pengujian biner,
sehingga Anda dapat menentukan satu direktori kerja untuk tag. Jika opsi binary-test-working-directory
tidak ditentukan, direktori default akan digunakan untuk setiap tag.
Nama tag langsung ditambahkan ke nama kasus pengujian dalam laporan hasil.
Misalnya, kasus pengujian testcase1
dengan tag _32bit
akan muncul sebagai testcase1_32bit
dalam laporan hasil.
Mengintegrasikan pengujian sisi target tanpa template BinaryTest
Di VTS, format pengujian default adalah pengujian Python sisi host yang diperluas dari BaseTest di runner VTS. Untuk mengintegrasikan pengujian sisi target, Anda harus terlebih dahulu mendorong file pengujian ke perangkat, menjalankan pengujian menggunakan perintah shell, lalu mengurai hasil menggunakan skrip Python sisi host.
Mengirim biner pengujian
Sebaiknya kirim file menggunakan penyiapan target VtsFilePusher
.
Contoh:
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> <option name="push" value="DATA/test->/data/local/tmp/test"/> </target_preparer>
VtsFilePusher
melakukan hal berikut:
- Memeriksa konektivitas perangkat.
- Menentukan jalur file sumber absolut.
- Mendorong file menggunakan perintah
adb push
. - Menghapus file setelah pengujian selesai.
Atau, Anda dapat mendorong file secara manual menggunakan skrip pengujian Python sisi host yang mengikuti prosedur serupa.
Menjalankan pengujian
Setelah mengirim file ke perangkat, jalankan pengujian menggunakan perintah shell dalam skrip pengujian Python sisi host. Contoh:
device = self.android_devices[0] res = device.shell.Execute(["chmod a+x /data/local/tmp/test", "/data/local/tmp/test"]) asserts.AssertFalse(any(res[return_codes]))
Template GtestBinaryTest
Template GtestBinaryTest menghosting biner pengujian GTest, yang masing-masing biasanya berisi beberapa kasus pengujian. Template ini memperluas template BinaryTest dengan mengganti metode penyiapan, pembuatan kasus pengujian, dan penguraian hasil, sehingga semua konfigurasi BinaryTest diwarisi.
GtestBinaryTest menambahkan opsi gtest-batch-mode
:
Nama opsi | Jenis nilai | Deskripsi |
---|---|---|
binary-test-type | string | Jenis template. Menggunakan nilai gtest . |
gtest-batch-mode | boolean | Menjalankan biner Gtest dalam mode batch. Contoh: true |
Secara umum, menetapkan gtest-batch-mode
ke true
akan meningkatkan performa sekaligus sedikit mengurangi keandalan. Dalam pengujian kepatuhan
VTS, banyak modul menggunakan mode batch untuk meningkatkan performa. Namun, untuk keandalan, jika mode tidak ditentukan, mode akan ditetapkan secara default ke non-batch.
Mode non-batch
Mode non-batch membuat panggilan terpisah ke biner GTest untuk setiap kasus pengujian. Misalnya, jika biner GTest berisi 10 kasus pengujian (setelah pemfilteran menurut konfigurasi sisi host), biner akan dipanggil 10 kali di shell perangkat setiap kali dengan filter pengujian yang berbeda. Untuk setiap kasus pengujian, XML output hasil GTest yang unik dibuat dan diuraikan oleh template.
Keuntungan menggunakan mode non-batch meliputi:
- Isolasi kasus pengujian. Error atau hang dalam satu kasus pengujian tidak memengaruhi kasus pengujian lainnya.
- Perincian. Lebih mudah mendapatkan pengukuran cakupan/profiling per kasus pengujian, systrace, bugreport, logcat, dll. Hasil dan log pengujian diambil segera setelah setiap kasus pengujian selesai.
Kekurangan menggunakan mode non-batch meliputi:
- Pemuatan redundan. Setiap kali biner GTest dipanggil, biner tersebut akan memuat library terkait dan melakukan penyiapan class awal.
- Overhead komunikasi. Setelah pengujian selesai, host dan perangkat target berkomunikasi untuk penguraian hasil dan perintah berikutnya (pengoptimalan mendatang mungkin).
Mode batch
Dalam mode batch GTest, biner pengujian hanya dipanggil sekali dengan nilai filter pengujian yang panjang yang berisi semua kasus pengujian yang difilter oleh konfigurasi sisi host (hal ini menghindari masalah pemuatan yang berlebihan dalam mode non-batch). Anda dapat mengurai hasil pengujian untuk GTest menggunakan output.xml atau menggunakan output terminal.
Saat menggunakan output.xml (default):
Seperti dalam mode non-batch, hasil pengujian diuraikan melalui file xml output GTest. Namun, karena XML output dihasilkan setelah semua pengujian selesai, jika kasus pengujian membuat biner atau perangkat error, tidak ada file XML hasil yang dihasilkan.
Saat menggunakan output terminal:
Saat berjalan, GTest akan mencetak log pengujian dan progres ke terminal dalam format yang dapat diuraikan oleh framework untuk status, hasil, dan log pengujian.
Keuntungan menggunakan mode batch meliputi:
- Isolasi kasus pengujian. Memberikan tingkat isolasi kasus pengujian yang sama dengan mode non-batch jika framework memulai ulang biner/perangkat setelah error dengan filter pengujian yang dikurangi (tidak termasuk kasus pengujian yang selesai dan error).
- Perincian. Memberikan perincian kasus pengujian yang sama dengan mode non-batch.
Kekurangan menggunakan mode batch meliputi:
- Biaya pemeliharaan. Jika format logging GTest berubah, semua pengujian akan rusak.
- Kebingungan. Kasus pengujian dapat mencetak sesuatu yang mirip dengan format progres GTest, yang dapat membingungkan format.
Karena kelemahan ini, kami telah menghapus opsi untuk menggunakan output command line untuk sementara. Kami akan meninjau kembali opsi ini di masa mendatang untuk meningkatkan keandalan fungsi ini.
Template HostBinaryTest
Template HostBinaryTest menyertakan file yang dapat dieksekusi sisi host yang tidak ada di direktori lain atau dalam skrip Python. Pengujian ini mencakup:
- Biner pengujian yang dikompilasi dan dapat dieksekusi di host
- Skrip yang dapat dieksekusi dalam shell, Python, atau bahasa lain
Salah satu contohnya adalah pengujian sisi host kebijakan VTS Security SELinux:
<configuration description="Config for VTS Security SELinux policy host-side test cases"> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsSecuritySelinuxPolicyHost"/> <option name="binary-test-source" value="out/host/linux-x86/bin/VtsSecuritySelinuxPolicyHostTest" /> <option name="binary-test-type" value="host_binary_test"/> </test> </configuration>
HostBinaryTest tidak memperluas template BinaryTest, tetapi menggunakan konfigurasi
pengujian yang serupa. Pada contoh di atas, opsi binary-test-source
menentukan jalur relatif sisi host ke file yang dapat dieksekusi pengujian, dan
binary-test-type
adalah host_binary_test
. Serupa dengan
template BinaryTest, nama file biner digunakan sebagai nama kasus pengujian secara
default.
Memperluas template yang ada
Anda dapat menggunakan template langsung di konfigurasi pengujian untuk menyertakan pengujian non-Python atau memperluasnya di subclass untuk menangani persyaratan pengujian tertentu. Template di repo VTS memiliki ekstensi berikut:
Developer dianjurkan untuk memperluas template yang ada untuk persyaratan pengujian tertentu. Alasan umum untuk memperluas template meliputi:
- Prosedur penyiapan pengujian khusus, seperti menyiapkan perangkat dengan perintah khusus.
- Membuat kasus pengujian dan nama pengujian yang berbeda.
- Mengurai hasil dengan membaca output perintah atau menggunakan kondisi lain.
Untuk memudahkan perluasan template yang ada, template berisi metode yang dikhususkan untuk setiap fungsi. Jika Anda telah meningkatkan desain untuk template yang ada, sebaiknya kontribusikan ke code base VTS.