Tests auf mehreren Geräten

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.

Abbildung 1: VTS, die Geräteserien übergeben.

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:

Abbildung 2: Hostseitiger HAL-Test.

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:

Abbildung 3: Hostseitiger, agentenbasierter Test.

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:

Abbildung 4. Zielbasierter HIDL-Test.

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')