AOSP menyertakan template pengujian untuk modul pengujian yang bukan Python sisi host subclass dari BaseTest runner VTS.
Pengembang dapat menggunakan {i>template<i} ini untuk meminimalkan upaya yang dilibatkan dalam dengan mengintegrasikan pengujian tersebut. Bagian ini membahas cara mengonfigurasi dan menggunakan pengujian template (ada di VTS template/kasus pengujian direktori) dan memberikan contoh untuk template yang umum digunakan.
Template BinaryTest
Gunakan Uji Biner template untuk mengintegrasikan pengujian yang dijalankan pada perangkat target di VTS. Pengujian sisi target mencakup:
- Pengujian berbasis C++ dikompilasi dan dikirim ke perangkat
- Pengujian Python sisi target yang dikompilasi sebagai biner
- Skrip shell yang dapat dieksekusi di perangkat
Pengujian ini dapat diintegrasikan ke VTS dengan atau tanpa BinaryTest {i>template<i}.
Integrasikan pengujian sisi target dengan Template BinaryTest
Template BinaryTest dirancang untuk membantu developer mengintegrasikannya dengan mudah
pengujian sisi target. Dalam kebanyakan kasus, Anda dapat
menambahkan beberapa baris sederhana
konfigurasi 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
adalah khusus template.- Menentukan jalur host relatif sumber biner pengujian akan mengaktifkan template untuk menangani persiapan, pengiriman file, eksekusi uji, penguraian hasil, dan pembersihan data.
- Template ini berisi metode terkait pembuatan kasus pengujian untuk subclass untuk penggantian.
- Template ini mengasumsikan satu kasus pengujian per modul biner pengujian, dan biner nama file sumber digunakan sebagai nama kasus pengujian secara default.
Opsi konfigurasi
Template BinaryTest mendukung opsi konfigurasi berikut:
Nama opsi | Jenis nilai | Deskripsi |
---|---|---|
sumber-pengujian-biner | {i>string<i} | Jalur sumber pengujian biner relatif terhadap direktori kasus pengujian vts aktif
{i>host<i}. Contoh: DATA/nativetest/test |
direktori-kerja-pengujian-biner | {i>string<i} | Direktori yang berfungsi (jalur sisi perangkat). Contoh: /data/local/tmp/testing/ |
{i>binary-test-envp<i} | {i>string<i} | Variabel lingkungan untuk biner. Contoh: PATH=/new:$PATH |
argumen-pengujian-biner | {i>string<i} | Argumen atau flag pengujian. Contoh: --gtest_filter=test1 |
{i>binary-test-ld-library-path<i} | {i>string<i} | Variabel lingkungan LD_LIBRARY_PATH .Contoh: /data/local/tmp/lib |
framework-pengujian-biner (binary-test-disable-framework) | boolean | Jalankan adb stop untuk menonaktifkan Framework Android sebelum pengujian.
Contoh: true |
server native-test-stop-native-biner | boolean | Hentikan semua server native yang dikonfigurasi dengan benar selama pengujian. Contoh:
true |
tipe pengujian-biner | string | Jenis template. Jenis {i>template<i} lainnya diperluas dari {i>template<i} ini, tetapi Anda
tidak perlu menentukan opsi ini untuk {i>template<i} ini karena Anda sudah
binary-test-source yang ditentukan. |
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 ditampilkan dalam
contoh VtsDeviceTreeEarlyMountTest
).
Tag pengujian
Anda dapat menambahkan tag pengujian dengan mengawalinya ke opsi dengan strings
nilai dan menggunakan ::
sebagai pembatas. Tag pengujian terutama
berguna ketika memasukkan sumber biner
dengan nama yang sama tetapi dengan nama yang berbeda
bitness atau direktori induk. Misalnya, untuk menghindari push file atau nama hasil
tabrakan 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::
aktif
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 pada ABI 64-bit. Bukan
menetapkan tag sama dengan menggunakan
tag dengan string kosong.
Opsi dengan tag yang sama akan dikelompokkan dan diisolasi dari tag lain. Sebagai
contoh, binary-test-args
dengan tag _32bit
adalah
hanya diterapkan ke binary-test-source
dengan tag yang sama dan dieksekusi
di binary-test-working-directory
dengan tag yang sama. Tujuan
Opsi binary-test-working-directory
bersifat opsional untuk pengujian biner,
yang memungkinkan Anda menentukan satu direktori kerja untuk sebuah tag. Jika
Opsi binary-test-working-directory
dibiarkan tidak ditentukan, default
digunakan untuk setiap tag.
Nama tag langsung ditambahkan ke nama kasus pengujian dalam laporan hasil.
Misalnya, kasus pengujian testcase1
dengan tag _32bit
muncul sebagai testcase1_32bit
dalam laporan hasil.
Integrasikan pengujian sisi target tanpa Template BinaryTest
Di VTS, format pengujian {i>default<i} adalah pengujian Python sisi {i>host<i} diperluas dari BaseTest di runner VTS. Untuk mengintegrasikan pengujian sisi target, Anda harus terlebih dahulu mengirim ke perangkat, jalankan pengujian menggunakan perintah shell, lalu uraikan hasil menggunakan skrip Python sisi host.
Mengirim biner pengujian
Sebaiknya kirim file menggunakan persiapan 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.
- Mengirim file menggunakan perintah
adb push
. - Menghapus file setelah pengujian selesai.
Atau, Anda dapat mengirim file secara manual menggunakan pengujian Python sisi host skrip yang mengikuti prosedur serupa.
Menjalankan pengujian
Setelah mengirim file ke perangkat, jalankan pengujian menggunakan perintah shell di 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
Tujuan Pengujian GtestBinary template menghosting biner pengujian GTest, yang masing-masing biasanya berisi beberapa kasus uji. Template ini memperluas template BinaryTest dengan mengganti pengaturan, pembuatan kasus pengujian, dan metode penguraian hasil, sehingga semua BinaryTest semua konfigurasi diwariskan.
GtestBinaryTest menambahkan opsi gtest-batch-mode
:
Nama opsi | Jenis nilai | Deskripsi |
---|---|---|
tipe pengujian-biner | string | Jenis template. Menggunakan nilai gtest . |
mode-gtest-batch | boolean | Jalankan biner Gtest dalam mode batch. Contoh: true |
Secara umum, menyetel gtest-batch-mode
ke true
meningkatkan kinerja, tetapi sedikit
mengurangi keandalan. Sesuai dengan VTS
pengujian, banyak modul menggunakan mode batch untuk meningkatkan performa. Untuk keandalan
tetapi, jika mode tidak ditentukan, defaultnya adalah non-batch.
Mode non-batch
Mode non-batch melakukan panggilan individual ke biner GTest untuk setiap kasus pengujian. Sebagai misalnya, jika biner GTest berisi 10 kasus pengujian (setelah memfilter menurut host konfigurasi sisi), biner dipanggil 10 kali di shell perangkat setiap kali dengan filter pengujian yang berbeda. Untuk setiap kasus pengujian, output hasil GTest unik XML 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 untuk mendapatkan pembuatan profil/cakupan per kasus pengujian pengukuran, systrace, laporan bug, logcat, dll. Hasil dan log pengujian segera diambil setelah setiap kasus pengujian selesai.
Kekurangan menggunakan mode non-batch meliputi:
- Pemuatan berlebihan. Setiap kali biner GTest dipanggil, ia 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 (mendatang pengoptimalan).
Mode batch
Dalam mode batch GTest, biner pengujian hanya dipanggil sekali dengan pengujian yang panjang nilai filter yang berisi semua kasus pengujian yang difilter menurut konfigurasi sisi host (ini menghindari masalah pemuatan yang redundan dalam mode non-batch). Anda dapat mengurai pengujian hasil untuk GTest menggunakan output.xml atau menggunakan output terminal.
Saat menggunakan output.xml (default):
Seperti dalam mode non-batch, hasil pengujian diurai melalui XML output GTest . Namun, karena XML output dibuat setelah semua pengujian selesai, jika kasus pengujian menimbulkan error pada biner atau perangkat, tidak ada hasil file xml dibuat.
Saat menggunakan output terminal:
Saat GTest berjalan, GTest mencetak log pengujian dan melanjutkan ke terminal dalam format yang dapat diurai oleh framework untuk status pengujian, hasil, dan log.
Keuntungan menggunakan mode batch meliputi:
- Isolasi kasus pengujian. Menyediakan tingkat pengujian yang sama isolasi kasus sebagai mode non-batch jika framework memulai ulang biner/perangkat setelah error dengan filter pengujian berkurang (tidak termasuk pengujian yang selesai dan error kasus).
- Perincian. Memberikan perincian kasus pengujian yang sama dengan mode non-batch.
Kekurangan menggunakan mode batch meliputi:
- Biaya pemeliharaan. Jika format {i>logging<i} GTest berubah, semua pengujian akan terhenti.
- Kebingungan. Kasus pengujian dapat mencetak sesuatu yang mirip dengan GTest {i>progres<i}, yang bisa mengacaukan formatnya.
Karena kelemahan ini, kami telah menghapus opsi untuk menggunakan output command line. 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 terkompilasi yang dapat dieksekusi di host
- Skrip yang dapat dijalankan di shell, Python, atau bahasa lainnya
Salah satu contohnya adalah VTS Pengujian sisi host kebijakan SELinux keamanan:
<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 namun menggunakan
konfigurasi pengujian. Dalam contoh di atas, binary-test-source
menentukan jalur relatif sisi host ke file pengujian yang dapat dieksekusi, dan
binary-test-type
adalah host_binary_test
. Mirip dengan
{i>template BinaryTest<i}, nama file biner digunakan sebagai nama kasus pengujian dengan
secara default.
Perluas template yang sudah ada
Anda bisa menggunakan template secara 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:
Pengembang disarankan untuk memperluas {i>template<i} yang sudah ada untuk persyaratan pengujian. Alasan umum untuk memperluas template meliputi:
- Prosedur penyiapan pengujian khusus, seperti menyiapkan perangkat dengan perintah.
- Membuat berbagai kasus pengujian dan nama pengujian.
- Mengurai hasil dengan membaca output perintah atau menggunakan kondisi lain.
Untuk mempermudah perluasan template yang ada, template ini berisi metode khusus untuk setiap fungsi. Jika Anda telah memperbaiki desain yang sudah ada {i>template<i}, kami mendorong Anda untuk berkontribusi pada {i>code base<i} VTS.