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.