Library Framework Pengujian SDV

Halaman ini memberikan ringkasan library Framework Pengujian SDV dan memandu Anda dalam menyiapkan, mengonfigurasi, dan menjalankan pengujian. Gunakan Framework Pengujian SDV untuk pengujian menyeluruh. Alat ini dibuat di Mobly; Anda menulis pengujian di Python.

Memilih pendekatan pengujian

Sebelum menulis pengujian, pilih runner pengujian yang sesuai dengan cakupan verifikasi Anda:

Cakupan pengujian Jenis modul Soong Alat eksekusi Kapan digunakan
Pengujian unit paket layanan rust_test, rust_test_host, atau cc_test atest Verifikasi logika bisnis Rust atau C++ yang terisolasi, transformasi data, atau crate helper di host atau satu virtual machine (VM) Cuttlefish.
Pengujian sistem menyeluruh dan multi-VM python_test_host (Framework Pengujian SDV) atest atau CATBox Verifikasi orkestrasi siklus proses paket layanan, komunikasi antar-VM, bridging SOME/IP, atau target hardware di satu hingga tiga VM.

Menyiapkan lingkungan

Halaman ini mengasumsikan bahwa Anda telah menyiapkan workstation untuk SDV. Untuk menjalankan pengujian Framework, instal virtualenv.

Dependensi Python

Pendekatan yang direkomendasikan untuk mengelola dependensi di Android adalah dengan memaketkan pengujian, Python, dan dependensinya sebagai file yang dapat dieksekusi menggunakan konfigurasi build. Anda harus mengikuti pendekatan ini di repositori pengujian SDV.

Library Framework Pengujian SDV menyediakan dependensi ini secara default:

  • mobly
  • absl-py Diperlukan untuk menggunakan parameterisasi dalam pengujian.
  • pexpect Diperlukan untuk fungsi perintah interaktif.
  • ptyprocess Diperlukan untuk fungsi perintah interaktif.

Jika Anda memerlukan dependensi khusus pengujian, sertakan dependensi tersebut dalam file Android.bp pengujian:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

Jenis uji sistem

Anda membuat uji sistem menggunakan Framework Pengujian SDV. Framework ini membedakan jenis-jenis berikut. Kategorikan pengujian dengan benar:

  • Pengujian sampel: Jalankan layanan sampel SDV dan verifikasi bahwa hasilnya sesuai dengan output yang diharapkan.
  • Pengujian E2E: Jangan gunakan layanan contoh SDV.
  • Pengujian yang berjalan lama: Dirancang untuk periode eksekusi yang diperpanjang.
  • Pengujian performa: Gunakan library perfetto.
  • Pengujian hardware: Dirancang untuk dijalankan secara eksklusif di perangkat fisik, bukan di Cuttlefish (CF).

Membuat pengujian

Semua pengujian yang ditulis menggunakan framework harus berada di repositori pengujian. Lokasi pasti pengujian bergantung pada jenisnya. Untuk jalur direktori, template class pengujian Python, aturan Android.bp, dan panduan coding Mobly, lihat Pembuatan uji sistem SDV.

Mengonfigurasi pengujian

Konfigurasikan semua pengujian agar berjalan menggunakan atest dan CATBox.

Mengonfigurasi atest

Framework ini menyediakan template untuk pengujian satu, dua, dan tiga VM. Tambahkan kode berikut ke file Android.bp Anda:

  • Satu VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • Dua VM:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • Tiga VM:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

Template default sudah cukup untuk sebagian besar pengujian. Hindari membuat konfigurasi kustom kecuali ada alasan yang kuat.

Memperbarui waktu tunggu default

Waktu tunggu default seharusnya cukup untuk menjalankan pengujian secara lokal.

Jika pengujian Anda gagal secara lokal karena waktu tunggu habis, pertimbangkan untuk membaginya menjadi pengujian yang berbeda. Pengujian yang sangat panjang dengan banyak kasus pengujian dapat menyebabkan bottleneck dalam eksekusi.

Jika Anda harus menetapkan waktu tunggu yang lebih tinggi dari default, lanjutkan membaca.

Mengganti waktu tunggu default

Framework ini tidak mendukung perluasan template untuk eksekusi atest. Oleh karena itu, gunakan template yang disediakan yang menawarkan waktu tunggu yang diperpanjang.

  • Satu pengujian panjang VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • Pengujian panjang dua VM:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

Tambahkan komentar yang dengan jelas menunjukkan tujuan penggunaan template ini dan menjelaskan alasan perpanjangan waktu diperlukan (misalnya, jika pengujian memerlukan download artefak yang memerlukan waktu tertentu).

Memasukkan file ke perangkat

Langkah-langkah berikut menjelaskan cara mengirim file ke perangkat untuk konfigurasi atest.

Memasukkan file ke perangkat

Framework ini tidak mendukung perluasan template untuk eksekusi atest. Oleh karena itu, Anda harus membuat file AndroidTest.xml yang sepenuhnya menggantikan template default dan menyertakan opsi target_preparer yang sesuai untuk perangkat.

  1. Salin konten template:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Perbarui {MODULE} dengan nama modul pengujian Anda.

  3. Tambahkan com.android.tradefed.targetprep.PushFilePreparer ke setiap perangkat.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

Mengonfigurasi CATBox

Untuk menjalankan pengujian sebagai rangkaian, konfigurasi CATBox diperlukan.

  1. Buat file konfigurasi baru di libraries/sdv/sdv_catbox/res/config/ dan ikuti konvensi penamaan berikut:

    • Contoh pengujian: sdv-sample-<NAME>-test.xml
    • Pengujian E2E: sdv-e2e-<NAME>-test.xml
    • Pengujian yang berjalan lama: sdv-long-running-<NAME>-test.xml
    • Pengujian performa: sdv-performance-<NAME>-test.xml
    • Pengujian hardware: sdv-hw-<NAME>-test.xml
  2. Tambahkan informasi yang sesuai berdasarkan jenis pengujian:

  • Satu konfigurasi pengujian VM:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Konfigurasi pengujian dua VM:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Konfigurasi pengujian tiga VM:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

Template default sudah cukup untuk sebagian besar pengujian. Hindari membuat konfigurasi kustom kecuali ada alasan yang kuat.

Memperbarui waktu tunggu default

Jika waktu tunggu default tidak cukup untuk pengujian, Anda dapat menggantinya.

Mengganti waktu tunggu default

Untuk mengganti waktu tunggu default, tambahkan baris berikut ke akhir file konfigurasi Anda. Pengujian yang lama harus memiliki waktu tunggu maksimum 10 menit.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Memasukkan file ke perangkat

Bagian berikut menjelaskan cara mengirim file ke perangkat saat mengonfigurasi CATBox.

Memasukkan file ke perangkat

Untuk mengirim file ke perangkat yang sesuai, tambahkan konfigurasi berikut setelah opsi plan:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

Jika Anda memerlukan file di setiap perangkat, tambahkan konfigurasi untuk setiap perangkat (misalnya, name=device1, name=device2).

Eksekusi uji

Petunjuk ini mengasumsikan bahwa Anda telah menyelesaikan penyiapan lingkungan SDV yang berfungsi.

Menyiapkan lingkungan

Framework ini tidak memulai instance Cloud Virtual Device (CVD), jadi Anda harus memulainya sebelum menjalankan pengujian.

  1. Siapkan lingkungan dan luncurkan target SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Mulai instance CVD pertama:

    cvd create --config=sdv_core_instance1
    
  3. Mulai instance CVD kedua (untuk pengujian multi-VM):

    cvd create --config=sdv_core_instance2
    
  4. Mulai instance CVD ketiga (untuk pengujian multi-VM):

    cvd create --config=sdv_core_instance3
    

Menjalankan atest

atest <TestModuleName>

Menjalankan CATBox

Perintah ini mengasumsikan bahwa Anda berada di direktori root repositori.

  1. Build CATBox: m catbox
  2. (Opsional) Lihat semua paket pengujian SDV yang tersedia di CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Menjalankan pengujian:

  • Menjalankan satu pengujian VM:

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • Menjalankan pengujian dua VM:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • Menjalankan pengujian tiga VM:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522