Tests mit mehreren Geräten ausführen

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

Was ist anders, wenn ich mehrere Geräte habe?

Beim Konfigurieren und Ausführen von Tests auf mehreren Geräten in Trade Federation gibt es einige Unterschiede, insbesondere:

Jede vorhandene Konfiguration für ein Gerät ist für den Modus für mehrere Geräte gültig.

<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>

Konfiguration für mehrere Geräte

In diesem Dokument wird davon ausgegangen, dass Sie bereits mit der typischen TF-Testkonfiguration 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>

Zur Struktur sind einige Dinge zu erwähnen:

  • Für jedes benötigte Gerät 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. Damit wird auf das jeweilige Gerät verwiesen. So können Sie Ihren Test auf ein bestimmtes Gerät ausrichten.
  • <option> kann entweder einen globalen Bereich haben, wenn es sich im Stamm der Konfiguration befindet, oder auf den Gerätebereich beschränkt sein, wenn es innerhalb des <device>-Tags angegeben wird.

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

Aktualisierung über die Befehlszeile

Wenn Sie Optionen in der TF-Befehlszeile angeben, können Sie auch einen Gerätebereich mit {<device name>} angeben, wobei <device name> der in der XML-Konfiguration angegebene Name ist.

Im obigen Beispiel waren die folgenden Optionen zulässig:

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

Sie können nur eines der Geräteobjekte build_provider mit dem Gerätenamen ansprechen, z. B. so:

--{device2}device-setup:disable

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

Wie wählt TF die Geräte aus?

Die Trade Federation sucht nach einem Gerät, das dem device_requirements entspricht (in der Regel die Gerätevariante, das Produkt usw.), in der Reihenfolge, in der das Gerät in der Konfiguration aufgeführt ist. Jedes Mal, wenn ein Gerät zugewiesen wird, versucht TF, das nächste zuzuweisen. Wenn es nicht möglich ist, alle Geräte zuzuweisen, werden sie alle freigegeben und der Befehl wird noch einmal ausgeführt, wenn alle Geräte übereinstimmen.

Wie bereitet TF die Geräte vor?

Der Vorbereitungsschritt für mehrere Geräte ist größtenteils derselbe wie für einzelne Geräte. Jedes Gerät wird durch Aufrufen von <target_preparer> in der Reihenfolge vorbereitet, in der es in <device> angezeigt wird.

Sie können auch <multi_target_preparer> verwenden, das im Stammverzeichnis der Konfiguration angegeben ist und Vorbereitungsschritte ermöglicht, 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 einzelner Geräte erfolgen muss.
  • <multi_target_preparer> sollte für die Einrichtung verwendet werden, die nach der Einrichtung einzelner Geräte erfolgen muss.

Beispiel:

Gerät 1 flashen (target_preparer) Gerät 2 flashen (target_preparer) Bluetooth beide Geräte verbinden (multi_target_preparer)

Test für mehrere Geräte 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 von Gerät zu seinem 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 zum Schreiben von Tests zur Verfügung stellt.

Es gibt noch keine APIs, um Vorgänge von einem Gerät auf ein anderes auszuführen, z. B. device1.sync(device2). Wenn Sie der Meinung sind, dass Sie einen überzeugenden Anwendungsfall haben, der unterstützt werden sollte, senden Sie Ihre Begründung an die Liste android-platform.

„Hallo Welt“-Beispiel für mehrere Geräte

Wir haben eine Beispielkonfiguration ähnlich wie „Hello World“ hinzugefügt: multi-devices.xml. Außerdem gibt es ein Beispiel für die multi_target_preparer-Implementierung HelloWorldMultiTargetPreparer, das zeigt, wie die Liste der Geräte und ihre Builds abgerufen werden.

Hier ein vollständiges Beispiel, das Folgendes umfasst:

  • Zwei Geräte zuweisen
  • Zugriff auf beide Geräte über ein multi_target_preparer
  • Test mit den beiden Geräten ausführen

Nachdem Sie Tradefed erstellt haben, können Sie den folgenden Befehl in der TF-Shell 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'

Sie benötigen zwei verbundene Geräte, um die oben genannten Schritte auszuführen. Das lässt sich so prüfen: 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 jedem Aufruf 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, welcher Gerätetyp tatsächlich festgelegt werden soll.