Questo documento fornisce istruzioni dettagliate su come creare contenuti multi-dispositivo. e richiamano le limitazioni attuali, se note.
L'esempio
È fornito un modulo multi-dispositivo CTS compatibile con il Wi-Fi. Invia un messaggio da un dispositivo tramite Wi-Fi e verifica che l'altro dispositivo lo riceva.
Il codice sorgente del modulo si trova in packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/.
Abbiamo annotato l'esempio con tutti i commenti che riteniamo utili.
Passaggio 1: crea la cartella del modulo
Ti consigliamo di creare una cartella per il modulo multi-dispositivo nel progetto della suite a cui appartiene. Ad esempio: cts/hostsidetests/multidevices/. Ti consigliamo di farlo in modo che tutti i moduli multi-dispositivo rimangano collocati almeno inizialmente, il che faciliterà la scoperta di 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 del test Mobly, ad esempio: wifi_aware_test.py.
Passaggio 3: crea il file di compilazione: 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:
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, come ad esempio:
<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 ha una dipendenza 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
mobly-test-timeout
per il test. È in millisecondi e si applica all'esecuzione binaria completa di Python (tutti gli scenari di test insieme). Questo è necessario per evitare che gli scenari di test rimangano inutilizzati per sempre in caso di 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 localmente: atest
Al momento, i test multi-dispositivo vengono eseguiti solo su dispositivi fisici. Prima di eseguire il
test, verifica che i dispositivi di test siano nello stato corretto. Il comando adb
devices
dovrebbe indicare l'elenco dei dispositivi collegati. 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
Nell'output del test dovresti vedere il numero di dispositivi utilizzati nell'intestazione del riepilogo, 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 sono multi-dispositivo o mono-dispositivo, non esistono moduli misti. Se provi a eseguire un modulo multi-dispositivo senza più dispositivi, viene visualizzato questo errore:
Expected to get at least 2 controller objects, got 1
Il problema verrà risolto eseguendo il modulo in modalità multi-dispositivo.
Per CTS: puoi utilizzare lo sharding per attivarlo (ad es. --shard-count 2)
o run cts-multidevces
.