In diesem Dokument finden Sie eine detaillierte Anleitung zum Erstellen -Modulen und weist gegebenenfalls auf aktuelle Einschränkungen hin.
Das Beispiel
Ein WLAN-fähiges CTS-Modul für mehrere Geräte ist mitgeliefert. Sie sendet eine Nachricht von einer und überprüft, ob das andere Gerät das Gerät empfängt.
Die Quelle für das Modul finden Sie hier: packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/
Wir haben das Beispiel mit so vielen Kommentaren versehen, wie wir es für nützlich halten.
Schritt 1: Modulordner erstellen
Es wird empfohlen, einen Ordner für das Modul für mehrere Geräte in der Suite zu erstellen Projekt, zu dem sie gehört. Beispiel: cts/hostsidetests/multidevices/. Wir empfehlen dies, damit alle Module mit mehreren Geräten mindestens mindestens So können Sie leichter Beispiele finden.
Alle Dateien für dieses Modul sollten in einem eigenen Modulordner abgelegt werden. Für
Beispiel: wifi_aware
.
Schritt 2: Test erstellen
Hier implementieren Sie die Testlogik. Sie hängt stark davon ab, zu testen.
Erstellen Sie die Mobly-Testquelle wie folgt: wifi_aware_test.py.
Schritt 3: Build-Datei erstellen: Android.bp
Fügen Sie eine Android.bp-Datei wie packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp Definieren Sie ein python_test_host-Modul, das ungefähr so aussieht:
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",
],
}
Geben Sie die Snippets für den Test mit dem Datenfeld an. Diese werden mit der Binärdatei und kann im Test durch ATest oder in Kontinuierliche Ausführung
Mobly Bundled Snippets sind für Android unter external/mobly-bundled-Snippets/ verfügbar.
Optional: Benutzerdefinierte Snippets erstellen
Für einige Module für mehrere Geräte sind möglicherweise benutzerdefinierte Mobly-Snippets erforderlich. Beispieltest enthält ein Wi-Fi-aware-Snippet unter packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, die mit Mobly Snippet Lib erstellt wurde, verfügbar in Android unter: external/mobly-snippet-lib/:
Das Snippet sollte mit der android_test-Regel in Android.bp wie folgt definiert werden: Standardinstrumentierung:
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",
],
}
Schritt 4: Modulkonfiguration erstellen: AndroidTest.xml
Fügen Sie eine AndroidTest.xml-Datei wie packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml In dieser Testkonfiguration müssen Sie zwei Geräte für den Test angeben, ähnlich wie:
<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>
Beachten Sie Folgendes:
- Dieser Beispieltest ist von Mobly abhängig. Beliebige Abhängigkeit kann angegeben werden
für
PythonVirtualenvPreparer
und wird mit pip installiert. - Das Feld
mobly-par-file-name
fürMoblyBinaryHostTest
muss mit dem Modul übereinstimmen wie in Android.bp. - Geben Sie eine
mobly-test-timeout
für den Test an. Sie ist in Millisekunden und gilt für die gesamte Ausführung von Python-Binärprogrammen (alle Testfälle zusammen). Dies ist erforderlich, um zu vermeiden, dass Testfälle bei Problemen immer wieder hängen. - Jedes
device
-Tag kann auf jedem Gerät eine eigene Konfiguration haben, The Mobly config empfängt sie in der Reihenfolge, die in der XML angegeben ist.
Snippet-APK Installation:
- Der ursprüngliche Ansprechpartner wurde aktualisiert, um Snippet-APKs über target_preparer aufgrund eines Gesprächs mit dem Abdeckungsteam: Um sicherzustellen, Abdeckungsmessungen werden nicht zu früh gelöscht, Deinstallation durch Harness als mit Testcode in Python-Binärdateien, bieten bessere Garantien des zeitlichen Rahmens.
Schritt 5: Test lokal ausführen: atest
Derzeit werden Tests für mehrere Geräte nur auf physischen Geräten ausgeführt. Bevor Sie den
und prüfen Sie, ob die Testgeräte in Ordnung sind. Mit dem Befehl adb
devices
sollte die Liste der verbundenen Geräte gemeldet werden. Enthält die Liste
Geräte, die nicht für Tests bestimmt sind, gib die Geräte für den Test mit -s an
melden.
Prüfen Sie für WLAN-Tests, ob das WLAN für die Geräte aktiviert ist (nach dem Zurücksetzen auf die Werkseinstellungen).
Sie können den Test lokal mit atest ausführen:
$ atest CtsWifiAwareTestCases
Die Anzahl der verwendeten Geräte sollte in der Zusammenfassung in Atest angezeigt werden
die Ausgabe, etwa Test executed with 2 device(s)
.
Fehlerbehebung
Wenn der Test bei der lokalen Ausführung aus folgenden Gründen fehlschlägt:
Virtualenv-Fehler
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
Achten Sie darauf, dass sich virtualenv
in Ihrem PATH befindet. "~/.local/bin" hinzufügen in PATH sollte
und das Problem zu beheben.
Wenn „Virtualenv“ nicht installiert ist, folgen Sie der Anleitung unter: https://Virtualenv.pypa.io/en/latest/installation.html
Mindestens 2 Controller-Objekte erwartet, 1 erhalten
Testmodule bestehen entweder aus mehreren Geräten oder einem einzelnen Gerät. Es gibt keine gemischten Modulen. Wenn Sie versuchen, ein Modul für mehrere Geräte auszuführen, sehen Sie diesen Fehler:
Expected to get at least 2 controller objects, got 1
Wenn Sie das Modul im Modus für mehrere Geräte ausführen, wird das Problem behoben.
Für CTS: Sie können sie durch Fragmentierung auslösen (z. B. --shard-count 2).
oder run cts-multidevces
.