VTS unterstützt Tests, die eine Interaktion zwischen mehreren Android-Geräten erfordern Geräte.
Architektur
VTS nutzt das TradeFed-Framework, um Geräteserien abzurufen und zu testen Module.
Geräteanforderungen wie die Anzahl der Geräte und Gerätetypen in der Testplankonfiguration angegeben. Sie können beispielsweise einen Testplan Dafür sind zwei Android-Geräte mit Sailfish-Build-Zielen erforderlich.
Gerätezuweisung
Die Testinfrastruktur (normalerweise der Testplaner) weist verfügbare Geräte, die die in der Testplankonfiguration angegebenen Anforderungen erfüllen, des VTS-Frameworks an. Zugewiesene Geräte sind für den Testplan reserviert, auch wenn die werden vom Testmodul nicht verwendet. Die Binärdateien des VTS-Agents werden dann per Push übertragen und ausgeführt. Auf allen zugewiesenen Geräten (es sei denn, Sie werden ausdrücklich angewiesen, die Geräte nicht zu verwenden). Dadurch wird sichergestellt, TCP-Verbindungen für Shell-Befehle und HAL-RPCs für alle Geräte in einem Testskript.
Testvorbereitung
Das Framework führt Testvorbereitungen für alle Geräte aus, für die es erhalten hat. Seriennummern. Die Tools können auf einem Gerät oder auf mehreren Geräten erstellt werden:
- Tools für die Vorbereitung auf ein einzelnes Gerät (z. B.
VtsDeviceInfoCollector)
<ph type="x-smartling-placeholder">
- </ph>
- Kann nur in der Testplankonfiguration mit den erforderlichen Geräteliste (in zukünftigen Versionen ist die Konfiguration auf Modulebene möglich)
- Nur eine Geräteserie erhalten.
- Vorbereiten und Bereinigen von Aufgaben auf einem bestimmten Gerät ausführen
- Tools für die Vorbereitung auf mehrere Geräte (Beispiel
VtsPythonVirtualenvPreparer):
<ph type="x-smartling-placeholder">
- </ph>
- Kann in der Testplankonfiguration oder im Testmodul angegeben werden Konfiguration
- Alle Geräteserien erhalten
- Führen Sie Vorbereitungs- und Bereinigungsaufgaben für alle oder alle Geräte aus.
Testmodule
Die Testmodule erhalten eine Liste der Geräte, nachdem die Prüfungsteilnehmer die Einrichtung abgeschlossen haben den Host/die Geräte. Ein Python-Testmodul auf Hostseite wird für jedes Gerät mit mehreren Geräten ausgeführt. Testmodul. Über Python-Testmodule kann auf zugewiesene Android-Geräte zugegriffen werden als Liste von Android-Gerät Objekte:
devices = self.android_devices device1 = devices[0] device1_serial = device1.serial
Alle zugewiesenen Geräte sind für den Testplan reserviert, auch wenn ein Test des Tarifs nur ein Gerät verwendet.
Gerätekommunikation während des Tests
Effektive Multi-Android-Tests umfassen die Kommunikation zwischen Geräte. Bei der Entwicklung solcher Tests müssen Sie festlegen, wie Sie Kommunikation zwischen den zugewiesenen Geräten. In den folgenden Abschnitten finden Sie drei Beispiele für die Kommunikation (Test-Entwickelnde können jedoch Modelle).
Typ 1: Hostseitige HAL-Tests
Hostseitige HAL-Tests können VTS HAL-Treiber verwenden, die über Standardeinstellung:
Gehen Sie in diesem Szenario so vor:
- Testlogik wird auf dem Host ausgeführt.
- Das Host-seitige Testskript gibt auf jedem Gerät RPC-Aufrufe an die Treiber aus.
- Host-Seite koordiniert Geräteinteraktionen.
Typ 2: Agent-basierte Tests auf Hostseite
Anstatt VTS-Agents auf dem Gerät zu verwenden, kann ein hostseitiger Test auch eigene (App oder Binärprogramm) an jedes Gerät:
Gehen Sie in diesem Szenario so vor:
- Testlogik wird auf dem Host ausgeführt.
- Agent-App- oder Binärinstallationen auf jedem Gerät
- Das Host-seitige Testskript gibt Befehle an Apps auf jedem Gerät aus.
- Host-Seite koordiniert Geräteinteraktionen.
Beispiel: Der Parameter Weiter Milliarden Nutzertests im aktuellen VTS-Repository sind hostseitig, appbasiert Tests für mehrere Geräte.
Typ 3: zielseitige HIDL-Tests
Bei zielseitigen HIDL-Tests auf mehreren Geräten wird die gesamte Testlogik geräteseitig getestet Binärprogramme, bei denen die Tests die Geräte während des Tests synchronisieren müssen Ausführung:
Gehen Sie in diesem Szenario so vor:
- Die Testlogik wird auf Geräten ausgeführt.
- Das Host-Side-Framework liefert die erste Geräteidentifikation.
- Für die zielseitige Testbinärdatei ist eine Synchronisierung erforderlich:
- Dieselbe Testbinärdatei für alle Geräte.
- Verschiedene Testbinärdateien für jede Rolle.
Beispiel: Testplan für mehrere Geräte
In diesem Beispiel wird die Konfiguration für zwei Geräte angegeben:
- Gerät 1 umfasst einen Build-Anbieter und
VtsDeviceInfoCollector
Zielvorbereitung. - Gerät 2 enthält einen zusätzlichen
FilePusher
-Preparer, der eine Gruppe von hostgesteuerten Dateien auf dem Gerät.
<configuration description="VTS Codelab Plan"> ... <device name="device1"> <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" /> <target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" /> </device> <device name="device2" > <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" /> <target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" /> <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> <option name="push-group" value="HostDrivenTest.push" /> </target_preparer> </device> <option name="compatibility:include-filter" value="VtsCodelabHelloWorldMultiDeviceTest" /> </configuration>
Beispiel: Python-Testskript auf Hostseite
Details und Beispiele zu den Personen, die sich für die Prüfung vorbereiten, finden Sie unter Testbereiter: Für eine vollständige Beispiel für mehrere Geräte (siehe hello_world_multi Codelab erhalten.
def setUpClass(self): logging.info('number of device: %s', self.android_devices) asserts.assertEqual(len(self.android_devices), 2, 'number of device is wrong.') self.dut1 = self.android_devices[0] self.dut2 = self.android_devices[1] self.shell1 = self.dut1.shell self.shell2 = self.dut2.shell def testSerialNotEqual(self): '''Checks serial number from two device not being equal.''' command = 'getprop | grep ro.serial' res1 = self.shell1.Execute(command) res2 = self.shell2.Execute(command) def getSerialFromShellOutput(output): '''Get serial from getprop query''' return output[const.STDOUT][0].strip().split(' ')[-1][1:-1] serial1 = getSerialFromShellOutput(res1) serial2 = getSerialFromShellOutput(res2) logging.info('Serial number of device 1 shell output: %s', serial1) logging.info('Serial number of device 2 shell output: %s', serial2) asserts.assertNotEqual(serial1, serial2, 'serials from two devices should not be the same') asserts.assertEqual(serial1, self.dut1.serial, 'serial got from device system property is different from allocated serial') asserts.assertEqual(serial2, self.dut2.serial, 'serial got from device system property is different from allocated serial')