Suite multi-perangkat

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

Contoh

Modul multi-perangkat wifi-sadar CTS disediakan. Ini mengirim pesan dari satu perangkat melalui wifi dan memverifikasi perangkat lain menerimanya.

Sumber modul ada di cts/hostsidetests/multidevices/wifi_aware .

Kami telah membubuhi keterangan contoh dengan komentar sebanyak yang kami rasa berguna.

Langkah 1: Buat folder modul

Disarankan untuk membuat folder untuk modul multi-perangkat Anda di proyek suite miliknya. Misalnya: cts/hostsidetests/multidevices/ . Kami merekomendasikan ini agar semua modul multi-perangkat tetap ditempatkan setidaknya pada awalnya yang akan memudahkan untuk menemukan contoh.

Semua file untuk modul ini harus diletakkan di bawah folder modul mereka sendiri. Misalnya: wifi_aware .

Biasanya file OWNERS untuk modul diperlukan dan komponen bug harus ditentukan di dalamnya. Lihat cts/hostsidetests/multidevices/wifi_aware/OWNERS untuk contoh.

Langkah 2: Buat tes

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

Buat sumber pengujian Mobile, seperti: wifi_aware_test.py .

Langkah 3: Buat file build: Android.bp

Tambahkan file Android.bp seperti cts/hostsidetests/multidevices/wifi_aware/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 bidang data, yang akan dikemas dengan biner dan dapat ditemukan serta dipasang dalam pengujian oleh ATest atau dalam eksekusi berkelanjutan.

Mobly Bundled Snippet tersedia di Android di external/mobly-bundled-snippets/ .

Opsional: Buat cuplikan khusus

Beberapa modul multi-perangkat mungkin memerlukan cuplikan seluler khusus. Pengujian sampel mencakup cuplikan wifi-aware di cts/hostsidetests/multidevices/wifi_aware/snippet/ , 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: Buat konfigurasi modul: AndroidTest.xml

Tambahkan file AndroidTest.xml seperti cts/hostsidetests/multidevices/wifi_aware/AndroidTest.xml . Dalam konfigurasi pengujian ini, Anda perlu 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:

  • Tes sampel ini memiliki ketergantungan pada Mobile. Ketergantungan apa pun dapat ditentukan untuk PythonVirtualenvPreparer dan akan diinstal dengan pip.
  • Nama mobly-par-file-name untuk MoblyBinaryHostTest harus cocok dengan nama modul seperti di Android.bp.
  • Tentukan mobly-test-timeout mobil untuk tes. Itu dalam milidetik dan berlaku untuk eksekusi biner python lengkap (semua kasus uji bersama-sama). Ini diperlukan untuk menghindari kasus uji menggantung selamanya jika terjadi beberapa masalah.
  • Setiap tag device dapat berisi pengaturan yang berbeda pada setiap perangkat, Konfigurasi Mobly akan menerimanya dalam urutan yang sama seperti yang ditentukan dalam XML.

Terkait dengan instalasi cuplikan apk:

  • POC awal telah diperbarui untuk menginstal snippet apks melalui target_preparer karena percakapan dengan tim Cakupan: Untuk memastikan pengukuran cakupan tidak dihapus terlalu dini, mencopot pemasangan oleh Harness daripada dengan kode uji dalam biner Python menawarkan jaminan yang lebih baik dalam hal waktu.

Langkah 5: Jalankan tes secara lokal: atest

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

Untuk tes wifi, pastikan wifi diaktifkan untuk perangkat (setelah reset pabrik).

Anda dapat menjalankan tes secara lokal dengan atest:

$ atest CtsWifiAwareTestCases

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

Penyelesaian masalah

Jika pengujian gagal saat dijalankan secara lokal karena:

Kesalahan virtualenv

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

Harap pastikan virtualenv ada di PATH Anda. Menambahkan "~/.local/bin" ke PATH harus memperbaikinya. jika virtualenv tidak diinstal, ikuti: https://virtualenv.pypa.io/en/latest/installation.html

Diharapkan untuk mendapatkan setidaknya 2 objek pengontrol, mendapat 1

Modul uji adalah multi-perangkat atau perangkat tunggal, tidak ada modul campuran. Jika Anda mencoba menjalankan modul multi-perangkat tanpa banyak perangkat, Anda akan melihat kesalahan ini:

Expected to get at least 2 controller objects, got 1

Menjalankan modul dalam mode multi-perangkat akan menyelesaikan masalah.

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