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:
Jede vorhandene Konfiguration für ein Gerät ist für den Modus mit mehreren Geräten gültig.
<! -- 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 vertraut sind. Eine typische Testkonfiguration mit zwei Geräten sieht so 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. Damit wird auf das zugehörige Gerät verwiesen. So können Sie Ihren Test auf ein bestimmtes Gerät ausrichten. <option>
kann entweder global sein, wenn es sich im Stamm der Konfiguration befindet, oder auf Geräteebene beschränkt, wenn es im<device>
-Tag 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
Wenn Sie Optionen in der TF-Befehlszeile angeben, können Sie auch einen Gerätebereich mit {<device name>}
angeben. Dabei ist <device name>
der in der XML-Konfiguration angegebene Name.
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 durch Aufrufen der <target_preparer>
in der Reihenfolge ihrer Darstellung in der <device>
vorbereitet.
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:
Gerät 1 flashen (target_preparer) Gerät 2 flashen (target_preparer) Bluetooth verwenden, um beide Geräte zu verbinden (multi_target_preparer)
Mehrgerätetest 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 empfangen können, 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 gibt noch keine APIs, mit denen Vorgänge von einem Gerät auf ein anderes übertragen werden können, 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 zuweisen
- Über ein
multi_target_preparer
auf beide Geräte zugreifen - 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. Das kannst du so prüfen: adb devices
Während der Aufruf läuft, 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.