Tests mit mehreren Geräten durchführen

Auf dieser Seite erfahren Sie, wie Sie den Trade Federation Test Harness während der Tests mit mehreren Geräten verwenden.Sie sollten sich zuerst mit der normalen Verwendung vertraut machen, wie im End-to-End-Beispiel beschrieben.

Was ist bei mehreren Geräten anders?

Bei der Konfiguration und Ausführung von Tests für mehrere Geräte in Trade Federation gibt es einige Unterschiede. Insbesondere:

Eine bestehende Konfiguration für ein Gerät gilt für den Multi-Device-Modus.

<! -- TODO: Den Satz direkt darüber durch ein Beispiel für einen Anwendungsfall mit einem Gerät im Hinblick auf den Modus für mehrere Geräte in einem zweiten Satz erläutern. -->>

Konfiguration für mehrere Geräte

In diesem Dokument wird davon ausgegangen, dass Sie mit der typischen TF-Testkonfiguration bereits vertraut sind. So sieht eine typische Testkonfiguration mit zwei Geräten aus:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

Die Struktur hat einige Besonderheiten:

  • Für jedes Gerät, das benötigt wird, wird ein <device> erwartet.
  • <build_provider>, <target_preparer>, <device_recovery>, <device_requirements> und <device_options> müssen bei Bedarf im <device>-Tag enthalten sein. Andernfalls wird eine Ausnahme ausgelöst.
  • Das Attribut name für <device> ist obligatorisch und sollte für alle Geräte in der Konfiguration eindeutig sein. Er wird verwendet, um auf das zugehörige Gerät zu verweisen. So können Sie Ihren Test auf ein bestimmtes Gerät ausrichten.
  • <option> kann entweder im Stammverzeichnis der Konfiguration einen globalen Geltungsbereich haben oder auf den Gerätebereich beschränkt sein, wenn dies im Tag <device> angegeben wird.

Alle anderen Regeln, die für die Konfiguration eines einzelnen Geräts gelten, gelten auch hier. Weitere Informationen finden Sie im Hello World-Beispiel unten.

Aktualisierung über die Befehlszeile

Bei der Angabe von Optionen in der TF-Befehlszeile ist es auch möglich, einen Gerätebereich mithilfe von {<device name>} anzugeben, wobei <device name> der in der XML-Konfiguration angegebene Name ist.

Im Beispiel oben waren die folgenden Optionen zulässig:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Sie können Anzeigen mit dem Gerätenamen nur auf eines der Geräte-build_provider-Objekte ausrichten. Beispiel:

--{device2}device-setup:disable

In diesem Beispiel wird die Geräteeinrichtung für device2 übersprungen, für device1 jedoch nicht.

Wie wählt TF die Geräte aus?

Trade Federation sucht nach einem Gerät, das der device_requirements entspricht (in der Regel die Gerätevariante, das Produkt usw.), in der Reihenfolge, in der die Geräte in der Konfiguration angezeigt werden. Jedes Mal, wenn ein Gerät zugewiesen wird, versucht TF, das nächste zuzuweisen. Wenn nicht alle Geräte zugewiesen werden können, werden sie alle freigegeben und der Befehl wird noch einmal ausgeführt, wenn alle Geräte zugeordnet sind.

Wie bereitet TF die Geräte vor?

Die Vorbereitung für mehrere Geräte ist im Wesentlichen die gleiche wie für einzelne Geräte. Jedes Gerät wird vorbereitet, indem <target_preparer> in der angegebenen Reihenfolge innerhalb der <device> aufgerufen wird.

Sie können auch <multi_target_preparer> am Stamm der Konfiguration verwenden, um Vorbereitungsschritte zu aktivieren, für die mehrere Geräte erforderlich sind, z. B. das Koppeln von Geräten. Er wird nach dem Schritt target_preparer ausgeführt.

Eine Alternative ist <pre_multi_target_preparer>, das vor dem Schritt target_preparer ausgeführt wird.

  • <pre_multi_target_preparer> sollte für die Einrichtung verwendet werden, die vor der Einrichtung des einzelnen Geräts erfolgen muss.
  • <multi_target_preparer> sollte für die Einrichtung verwendet werden, die nach der Einrichtung einzelner Geräte erfolgen muss.

Beispiel:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

Multi-Device-Test schreiben

Wenn Sie einen regulären Test für ein einzelnes Gerät schreiben, implementieren Sie die Schnittstelle IDeviceTest.

Damit die Tests die zu testenden Geräte erhalten, können Sie entweder IMultiDeviceTest oder IInvocationContextReceiver implementieren.

IMultiDeviceTest bietet eine direkte Zuordnung des Geräts zu seiner IBuildInfo, während IInvocationContextReceiver später den vollständigen Kontext (Gerät, IBuildInfo und Metadaten) liefert.

Sie können dann die üblichen ITestDevice-APIs verwenden, die TF für das Schreiben von Tests zur Verfügung gestellt hat.

Es sind noch keine APIs vorhanden, um Vorgänge von einem Gerät zum anderen durchzuführen, z. B. device1.sync(device2). Wenn Sie der Meinung sind, dass ein überzeugender Anwendungsfall unterstützt werden sollte, senden Sie Ihre Begründung an die android-platform-Liste.

Hello World-Beispiel für mehrere Geräte

Wir haben eine Hello World-ähnliche Beispielkonfiguration hinzugefügt: multi-devices.xml Es gibt auch ein Beispiel für die multi_target_preparer-Implementierung HelloWorldMultiTargetPreparer, das zeigt, wie die Liste der Geräte und ihrer Builds empfangen wird.

Dies ist ein vollständiges Beispiel, das Folgendes umfasst:

  • Zwei Geräte werden zugewiesen
  • Zugriff auf beide Geräte über multi_target_preparer
  • Einen Test mit den beiden Geräten ausführen

Nachdem Sie Tradefed erstellt haben, können Sie in der TF-Shell den folgenden Befehl verwenden:

run example/multi-devices

Die Ausgabe sollte Folgendes enthalten:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

Dazu müssen zwei Geräte verbunden sein. Dies kann so geprüft werden: adb devices

Während des Aufrufs können Sie ihn wie einzelne Geräte mit list i und list d überwachen:

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

Sie sollten die an den einzelnen Aufrufen beteiligten Geräte sowie alle verfügbaren Geräte und ihren jeweiligen Status sehen können.

In diesem Beispiel haben wir die beiden Geräte in der Konfiguration device1 und device2 genannt. Sie sollten nach Möglichkeit einen aussagekräftigeren Namen verwenden, je nachdem, welchen Gerätetyp Sie tatsächlich festlegen möchten.