Führen Sie Tests mit mehreren Geräten durch

Diese Seite hilft Ihnen, das Trade Federation Test Harness während des Tests mit mehreren Geräten zu verwenden. Sie sollten sich zunächst 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 Multi-Device-Tests in Trade Federation sind einige Dinge anders, insbesondere:

Jede vorhandene Ein-Geräte-Konfiguration ist für den Mehrgerätemodus gültig.

<! – TODO: Verdeutlichen Sie den Satz direkt oben, indem Sie in einem zweiten Satz ein Beispiel für einen Anwendungsfall mit einem Gerät im Zusammenhang mit dem Multi-Geräte-Modus hinzufügen. -->>

Konfiguration mehrerer 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> (falls erforderlich) müssen im <device> -Tag enthalten sein; Andernfalls wird eine Ausnahme ausgelöst.
  • Das name für <device> ist obligatorisch und sollte unter allen in der Konfiguration vorhandenen Geräten eindeutig sein. Es wird verwendet, um auf das damit verbundene bestimmte Gerät zu verweisen. Dadurch kann Ihr Test auf ein bestimmtes Gerät abzielen.
  • <option> kann entweder einen globalen Bereich haben, wenn es sich im Stammverzeichnis der Konfiguration befindet, oder auf den Gerätebereich beschränkt sein, wenn es innerhalb des <device> -Tags angegeben wird.

Alle anderen für die Einzelgerätekonfiguration geltenden Regeln gelten hier weiterhin. Weitere Einzelheiten finden Sie im Hello World-Beispiel unten.

Befehlszeilen-Update

Bei der Angabe von Optionen in der TF-Befehlszeile ist es auch möglich, einen Gerätebereich mit {<device name>} anzugeben, 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 mit dem Gerätenamen nur eines der build_provider Objekte des Geräts ansprechen, etwa so:

--{device2}device-setup:disable

In diesem Beispiel überspringt device2 die Geräteeinrichtung, während device1 dies nicht tut.

Wie wählt TF die Geräte aus?

Trade Federation sucht nach einem Gerät, das den device_requirements (normalerweise Gerätetyp, Produkt usw.) entspricht, und zwar in der Reihenfolge, in der das Gerät in der Konfiguration erscheint. Jedes Mal, wenn ein Gerät zugewiesen wird, versucht TF, das nächste zuzuweisen. Wenn es nicht möglich ist, alle Geräte zuzuordnen, werden sie alle freigegeben und der Befehl wird erneut versucht, 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 vorbereitet, indem der <target_preparer> in der Reihenfolge seines Erscheinens im <device> aufgerufen wird.

Sie können auch <multi_target_preparer> verwenden, der im Stammverzeichnis der Konfiguration angegeben ist und Vorbereitungsschritte ermöglicht, die mehrere Geräte erfordern, z. B. das Koppeln von Geräten. Es wird nach dem target_preparer Schritt ausgeführt.

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

  • <pre_multi_target_preparer> sollte für die Einrichtung verwendet werden, die vor der Einrichtung einzelner Geräte durchgeführt werden muss .
  • <multi_target_preparer> sollte für die Einrichtung verwendet werden, die nach der Einrichtung einzelner Geräte durchgeführt werden muss.

Zum Beispiel:

Flash-Gerät 1 (target_preparer) Flash-Gerät 2 (target_preparer) Bluetooth verbindet beide Geräte (multi_target_preparer)

Schreiben Sie einen Test für mehrere Geräte

Wenn Sie einen regulären Einzelgerätetest schreiben, implementieren Sie die IDeviceTest- Schnittstelle.

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

IMultiDeviceTest bietet Ihnen eine direkte Zuordnung des Geräts zu seiner IBuildInfo , während IInvocationContextReceiver Ihnen 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 durchzuführen, wie etwa device1.sync(device2) . Wenn Sie der Meinung sind, dass Sie einen überzeugenden Anwendungsfall haben, der unterstützt werden muss, senden Sie Ihre Begründung an die Android-Plattform- Liste.

Beispiel für „Hallo Welt“ mit mehreren Geräten

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 beinhaltet:

  • Zwei Geräte zuordnen
  • Zugriff auf beide Geräte über einen multi_target_preparer
  • Führen Sie einen Test durch, bei dem die beiden Geräte verwendet werden

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

run example/multi-devices

Sie sollten eine Ausgabe sehen, die Folgendes enthält:

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'

Um die oben beschriebene Funktion ausführen zu können, müssen zwei Geräte angeschlossen sein. Dies kann über adb devices überprüft werden

Wenn der Aufruf ausgeführt wird, 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 in der Lage sein, die an jedem Aufruf beteiligten Geräte sowie alle verfügbaren Geräte und ihren jeweiligen Status zu sehen.

Beachten Sie, dass wir in diesem Beispiel die beiden Geräte in der Konfiguration device1 und device2 genannt haben; Sie sollten nach Möglichkeit einen aussagekräftigeren Namen vergeben, abhängig von der Art des Geräts, das Sie tatsächlich einstellen möchten.