Questo documento fornisce istruzioni dettagliate su come creare contenuti multi-dispositivo. e richiamano le limitazioni attuali, se note.
L'esempio
Viene fornito un modulo multi-dispositivo che riconosce il Wi-Fi CTS. Invia un messaggio da un dispositivo tramite Wi-Fi e verifica che l'altro dispositivo lo riceva.
Il codice sorgente del modulo è disponibile all'indirizzo packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/.
Abbiamo annotato l'esempio con il maggior numero di commenti che riteniamo utili.
Passaggio 1: crea la cartella del modulo
È consigliabile creare una cartella per il modulo multi-dispositivo nella suite progetto a cui appartiene. Ad esempio: cts/hostsidetests/multidevices/. Lo consigliamo in modo che tutti i moduli multi-dispositivo rimangano collocati almeno che renderà più facile trovare degli esempi.
Tutti i file per questo modulo devono essere inseriti nella cartella del modulo corrispondente. Per
esempio: wifi_aware
.
Passaggio 2: crea il test
È qui che implementi la logica di test. Dipende molto da ciò che in fase di test.
Crea l'origine di test di Mobly, ad esempio: wifi_aware_test.py.
Passaggio 3: crea il file di build: Android.bp
Aggiungi un file Android.bp come packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp. Definisci un modulo python_test_host, simile a questo:
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",
],
}
Specifica gli snippet per il test con il campo dei dati, che verranno pacchettizzati del file binario e può essere localizzato e installato nel test da ATest o Esecuzione continua.
Gli snippet in bundle mobile sono disponibili su Android all'indirizzo external/mobly-bundled-snippets/
(Facoltativo) Creare snippet personalizzati
Alcuni moduli multi-dispositivo potrebbero richiedere snippet Mobly personalizzati. Il test di esempio include uno snippet sensibile al Wi-Fi all'indirizzo packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, che è stata creata con Mobly Snippet Lib, disponibile su Android all'indirizzo: external/mobly-snippet-lib/.
Lo snippet deve essere definito con la regola android_test in Android.bp, ad esempio strumentazione standard:
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",
],
}
Passaggio 4: crea la configurazione del modulo: AndroidTest.xml
Aggiungi un file AndroidTest.xml come packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml. In questa configurazione di test, devi specificare due dispositivi per il test, simile a:
<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>
Tieni presente che:
- Questo test di esempio dipende da Mobly. È possibile specificare qualsiasi dipendenza
per
PythonVirtualenvPreparer
e verrà installata con pip. - Il valore
mobly-par-file-name
diMoblyBinaryHostTest
deve corrispondere al modulo come in Android.bp. - Specifica un valore
mobly-test-timeout
per il test. È in millisecondi e si applica all'esecuzione binaria completa di Python (tutti gli scenari di test insieme). Ciò è necessario per evitare che gli scenari di test rimangano definitivamente in sospeso in caso di alcuni problemi. - Ogni tag
device
può contenere una configurazione distinta su ciascun dispositivo, The Mobly config li riceverà nello stesso ordine specificato nel file XML.
Contenuti correlati all'APK snippet installazione:
- Il PDC iniziale è stato aggiornato per installare gli APK degli snippet tramite target_preparer a seguito della conversazione con il team Copertura: per garantire le misurazioni della copertura non vengono eliminate troppo presto; disinstallazioni tramite Harness. piuttosto che testare il codice nei file binari Python, offrendo migliori garanzie in termini delle tempistiche.
Passaggio 5: esegui il test in locale: atest
Attualmente, i test multi-dispositivo vengono eseguiti solo su dispositivi fisici. Prima di eseguire
verifica che i dispositivi di test siano nello stato corretto. Il comando adb
devices
dovrebbe segnalare l'elenco dei tuoi dispositivi connessi. Se l'elenco contiene
i dispositivi non destinati ai test, specifica i dispositivi per il test utilizzando -s
flag.
Per i test relativi al Wi-Fi, assicurati che il Wi-Fi sia attivo per i dispositivi (dopo il ripristino dei dati di fabbrica).
Puoi eseguire il test in locale con un test:
$ atest CtsWifiAwareTestCases
Dovresti vedere il numero di dispositivi utilizzati nell'intestazione di riepilogo di un test
un output, ad esempio Test executed with 2 device(s)
.
Risoluzione dei problemi
Se il test non va a buon fine durante l'esecuzione locale per i seguenti motivi:
Errore Virtualenv
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
Assicurati che virtualenv
si trovi nel tuo PATH. Aggiunta di "~/.local/bin" a PATH dovrebbe
correggerlo.
Se virtualenv non è installato, segui: https://virtualenv.pypa.io/en/latest/installation.html
Previsto almeno 2 oggetti controller, ne è presente 1
I moduli di test possono essere su più dispositivi o su un solo dispositivo, e moduli misti. Se tenti di eseguire un modulo multi-dispositivo senza dispositivi, verrà visualizzato questo errore:
Expected to get at least 2 controller objects, got 1
Il problema sarà risolto eseguendo il modulo in modalità multidispositivo.
Per CTS: puoi utilizzare lo sharding per attivarlo (ad esempio: --shard-count 2)
o run cts-multidevces
.