Template pengujian

AOSP menyertakan template pengujian untuk modul pengujian yang bukan Python sisi host subclass dari BaseTest runner VTS.

Gambar 1. Menguji arsitektur template.

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 dan binary-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:

  1. Memeriksa konektivitas perangkat.
  2. Menentukan jalur file sumber absolut.
  3. Mengirim file menggunakan perintah adb push.
  4. 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.

Gambar 2. Mode non-batch.

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):

Gambar 3. Mode batch, output.xml.

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:

Gambar 4. Mode batch, 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:

Gambar 5. Memperluas {i>template<i} yang ada di VTS repo.

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.