Dokumen ini memberikan petunjuk langkah demi langkah tentang cara membuat multiperangkat modul dan menjelaskan keterbatasan saat ini jika diketahui.
Contoh
Modul multiperangkat yang mendukung wifi CTS disediakan. Klien mengirimkan pesan dari satu perangkat melalui Wi-Fi dan memverifikasi perangkat lain yang menerimanya.
Sumber untuk modul ini berada di packages/modules/Wi-Fi/tests/hostsidetests/multidevices/test/aware/.
Kami telah menganotasi contoh tersebut dengan komentar sebanyak yang kami rasa berguna.
Langkah 1: Membuat folder modul
Sebaiknya buat folder untuk modul multi-perangkat di suite project miliknya. Misalnya: cts/hostsidetests/multidevices/. Sebaiknya gunakan opsi ini agar semua modul multiperangkat tetap berada minimal di terlebih dahulu sehingga memudahkan pencarian contoh.
Semua file untuk modul ini harus ditempatkan di folder modulnya sendiri. Sebagai
contoh: wifi_aware
.
Langkah 2: Buat pengujian
Di sinilah Anda menerapkan logika pengujian. Hal ini sangat bergantung pada yang sedang diuji.
Buat sumber pengujian Mobly, seperti: wifi_aware_test.py Anda.
Langkah 3: Buat file build: Android.bp
Tambahkan file Android.bp seperti packages/modules/Wi-Fi/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 biner dan dapat ditemukan dan diinstal di pengujian dengan ATest atau di Eksekusi berkelanjutan.
Cuplikan Paket Mobly tersedia di Android di external/mobly-bundled-snippets/.
Opsional: Buat cuplikan kustom
Beberapa modul multi-perangkat mungkin memerlukan cuplikan Mobly kustom. Contoh pengujian menyertakan cuplikan deteksi Wi-Fi 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: Buat konfigurasi modul: AndroidTest.xml
Tambahkan file AndroidTest.xml seperti packages/modules/Wi-Fi/tests/hostsidetests/multidevices/test/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:
- Pengujian sampel ini memiliki dependensi di Mobly. Setiap dependensi dapat ditentukan
untuk
PythonVirtualenvPreparer
dan akan diinstal dengan pip. mobly-par-file-name
untukMoblyBinaryHostTest
harus cocok dengan modul seperti pada Android.bp.- Tentukan
mobly-test-timeout
untuk pengujian. Dalam milidetik dan berlaku untuk eksekusi biner python lengkap (semua kasus pengujian bersama-sama). Hal ini diperlukan untuk menghindari kasus pengujian menggantung selamanya jika terjadi beberapa masalah. - Setiap tag
device
dapat berisi penyiapan yang berbeda di setiap perangkat, yaitu The Mobly akan menerimanya dalam urutan yang sama seperti yang ditentukan dalam XML.
Terkait dengan apk cuplikan penginstalan:
- POC awal telah diupdate untuk menginstal apk cuplikan melalui target_Siapkanr karena percakapan dengan tim Cakupan: Untuk memastikan pengukuran cakupan tidak dihapus terlalu dini, uninstal oleh Harness daripada kode pengujian dalam biner Python menawarkan jaminan yang lebih baik waktu.
Langkah 5: Jalankan pengujian secara lokal: atest
Saat ini, pengujian multiperangkat hanya berjalan pada perangkat fisik. Sebelum menjalankan
uji, pastikan perangkat pengujian Anda dalam kondisi yang benar. Perintah adb
devices
akan melaporkan daftar perangkat Anda yang terhubung. Jika daftar berisi
perangkat yang tidak dimaksudkan untuk pengujian, tentukan perangkat untuk pengujian menggunakan {i>-s<i}
penanda.
Untuk pengujian Wi-Fi, pastikan Wi-Fi diaktifkan untuk perangkat (setelah mereset 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, 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
dalam PATH Anda. Menambahkan "~/.local/bin" ke PATH seharusnya
memperbaikinya.
jika virtualenv tidak terinstal, buka: https://virtualenv.pypa.io/en/latest/installation.html
Diharapkan mendapatkan setidaknya 2 objek pengontrol, mendapatkan 1
Modul pengujian adalah multi-perangkat atau satu perangkat, tidak ada modul campuran. Jika Anda mencoba menjalankan modul multiperangkat tanpa beberapa perangkat, Anda akan melihat error ini:
Expected to get at least 2 controller objects, got 1
Mengeksekusi modul dalam mode multi-perangkat akan menyelesaikan masalah tersebut.
Untuk CTS: Anda dapat menggunakan sharding untuk memicunya (Misalnya: --shard-count 2)
atau run cts-multidevces
.