Modul multiperangkat

Dokumen ini memberikan petunjuk langkah demi langkah tentang cara membuat modul multi-perangkat dan menjelaskan batasan saat ini jika diketahui.

Contoh

Modul multi-perangkat CTS wifi-aware disediakan. Modul ini mengirim pesan dari satu perangkat melalui Wi-Fi dan memverifikasi bahwa perangkat lain menerimanya.

Sumber untuk modul ini ada di packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/.

Kami telah menganotasi contoh dengan komentar sebanyak yang kami rasa berguna.

Langkah 1: Membuat folder modul

Sebaiknya buat folder untuk modul multi-perangkat Anda di project rangkaian yang menjadi tempatnya. Misalnya: cts/hostsidetests/multidevices/. Sebaiknya lakukan hal ini agar semua modul multi-perangkat tetap berada di lokasi yang sama, setidaknya pada awalnya, sehingga akan memudahkan penemuan contoh.

Semua file untuk modul ini harus ditempatkan di folder modulnya sendiri. Misalnya: wifi_aware.

Langkah 2: Membuat pengujian

Di sinilah Anda menerapkan logika pengujian. Hal ini sangat bergantung pada apa yang sedang diuji.

Buat sumber pengujian Mobly, seperti: wifi_aware_test.py.

Langkah 3: Membuat file build: Android.bp

Tambahkan file Android.bp seperti packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp. Tentukan modul python_test_host, mirip dengan:

python_test_host {
    name: "CtsWifiAwareTestCases",
    main: "wifi_aware_test.py",
    srcs: ["wifi_aware_test.py"],
    test_suites: [
        "cts",
        "general-tests",
    ],
    test_options: {
        unit_test: false,
    },
    data: [
          // Package the snippet with the mobly test
        ":wifi_aware_snippet",
    ],
}

Tentukan cuplikan untuk pengujian dengan kolom data, yang akan dikemas dengan program biner dan dapat ditemukan serta diinstal dalam pengujian oleh ATest atau dalam Eksekusi berkelanjutan.

Cuplikan Paket Mobly tersedia di Android di external/mobly-bundled-snippets/.

Opsional: Membuat cuplikan kustom

Beberapa modul multi-perangkat mungkin memerlukan cuplikan Mobly kustom. Pengujian contoh mencakup cuplikan wifi-aware di packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, yang dibuat dengan Mobly Snippet Lib, tersedia di Android di: external/mobly-snippet-lib/.

Cuplikan harus ditentukan dengan aturan android_test di Android.bp seperti instrumentasi standar:

android_test {
    name: "wifi_aware_snippet",
    sdk_version: "current",
    srcs: [
        "CallbackUtils.java",
        "WifiAwareSnippet.java",
    ],
    manifest: "AndroidManifest.xml",
    static_libs: [
        "androidx.test.runner",
        "guava",
        "mobly-snippet-lib",
    ],
}

Langkah 4: Membuat konfigurasi modul: AndroidTest.xml

Tambahkan file AndroidTest.xml seperti packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml. Dalam konfigurasi pengujian ini, Anda harus menentukan dua perangkat untuk pengujian, mirip dengan:

<configuration description="Config for CTS Wifi Aware test cases">
    <option name="test-suite-tag" value="cts" />
    <option name="config-descriptor:metadata" key="component" value="wifi" />
    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
    <option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />

    <device name="device1">
        <!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
             So it's a lot easier to install APKs outside the python code.
        -->
        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
            <option name="test-file-name" value="wifi_aware_snippet.apk" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
            <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
            <option name="run-command" value="wm dismiss-keyguard" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
          <!-- Any python dependencies can be specified and will be installed with pip -->
          <option name="dep-module" value="mobly" />
        </target_preparer>
    </device>
    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
            <option name="test-file-name" value="wifi_aware_snippet.apk" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
            <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
            <option name="run-command" value="wm dismiss-keyguard" />
        </target_preparer>
    </device>

    <test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
      <!-- The mobly-par-file-name should match the module name -->
      <option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
      <!-- Timeout limit in milliseconds for all test cases of the python binary -->
      <option name="mobly-test-timeout" value="60000" />
    </test>
</configuration>

Perhatikan bahwa:

  • Pengujian contoh ini memiliki dependensi pada Mobly. Dependensi apa pun dapat ditentukan untuk PythonVirtualenvPreparer dan akan diinstal dengan pip.
  • mobly-par-file-name untuk MoblyBinaryHostTest harus cocok dengan nama modul seperti di Android.bp.
  • Tentukan mobly-test-timeout untuk pengujian. Nilai ini dalam milidetik dan berlaku untuk eksekusi biner Python lengkap (semua kasus pengujian bersama-sama). Hal ini diperlukan untuk menghindari kasus pengujian yang terus berjalan jika terjadi masalah.
  • Setiap tag device dapat berisi penyiapan yang berbeda di setiap perangkat. Konfigurasi Mobly akan menerimanya dalam urutan yang sama seperti yang ditentukan dalam XML.

Terkait penginstalan apk cuplikan:

  • POC awal telah diupdate untuk menginstal apk cuplikan melalui target_preparer karena percakapan dengan tim Cakupan: Untuk memastikan pengukuran cakupan tidak dihapus terlalu awal, menghapus instalasi dengan Harness, bukan dengan kode pengujian dalam biner Python, memberikan jaminan yang lebih baik dalam hal waktu.

Langkah 5: Menjalankan pengujian secara lokal: atest

Saat ini, pengujian multi-perangkat hanya berjalan di perangkat fisik. Sebelum menjalankan pengujian, pastikan perangkat pengujian Anda dalam kondisi yang tepat. Perintah adb devices akan melaporkan daftar perangkat yang terhubung. Jika daftar berisi perangkat yang tidak dimaksudkan untuk pengujian, tentukan perangkat untuk pengujian menggunakan tanda -s.

Untuk pengujian Wi-Fi, pastikan Wi-Fi diaktifkan untuk perangkat (setelah reset ke setelan pabrik).

Anda dapat menjalankan pengujian secara lokal dengan atest:

$ atest CtsWifiAwareTestCases

Anda akan melihat jumlah perangkat yang digunakan di judul ringkasan dalam output atest, seperti Test executed with 2 device(s).

Pemecahan masalah

Jika pengujian gagal saat dijalankan secara lokal karena:

Error Virtualenv

java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory

Pastikan virtualenv ada di PATH Anda. Menambahkan "~/.local/bin" ke PATH akan memperbaikinya. Jika virtualenv tidak diinstal, ikuti: https://virtualenv.pypa.io/en/latest/installation.html

Diharapkan mendapatkan minimal 2 objek pengontrol, mendapatkan 1

Modul pengujian adalah multi-perangkat atau perangkat tunggal, tidak ada modul campuran. Jika Anda mencoba menjalankan modul multi-perangkat tanpa beberapa perangkat, Anda akan melihat error ini:

Expected to get at least 2 controller objects, got 1

Menjalankan modul dalam mode multi-perangkat akan menyelesaikan masalah ini.

Untuk CTS: Anda dapat menggunakan sharding untuk memicunya (Misalnya: --shard-count 2) atau run cts-multidevces.