Module für mehrere Geräte

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 einem 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 die es leichter macht, Beispiele zu 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ür MoblyBinaryHostTest 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 .

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.