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.