Pruebas multidispositivo

El VTS admite pruebas que requieren interacción entre varios dispositivos Android dispositivos.

Arquitectura

El VTS usa el framework de TradeFed para obtener y aprobar series de dispositivos para realizar pruebas módulos.

Figura 1: El VTS pasa las series del dispositivo.

Los requisitos de dispositivos, como la cantidad y los tipos de dispositivos, especificadas en la configuración del plan de prueba. Por ejemplo, puedes especificar un plan de prueba que requiere dos dispositivos Android con objetivos de compilación de Sailfish.

Asignación de dispositivos

La infraestructura de prueba (por lo general, el programador de pruebas) asigna dispositivos que cumplan con los requisitos especificados en la configuración del plan de prueba para el framework de VTS. Los dispositivos asignados se reservan para el plan de prueba incluso si el el módulo de prueba no los usa. Luego, se envían y ejecutan los objetos binarios del agente de VTS todos los dispositivos asignados (a menos que se indique específicamente que no se ejecuten) Esto garantiza que las conexiones TCP para los comandos de shell y las RPC de HAL estén disponibles en una secuencia de comandos de prueba.

Preparadores de pruebas

El framework ejecuta preparadores de pruebas para todos los dispositivos que recibió. números de serie. Los preparadores de objetivos pueden ser de un dispositivo o varios:

  • Preparadores de orientación para un solo dispositivo (por ejemplo, en VtsDeviceInfoCollector):
    • Solo se puede especificar en la configuración del plan de prueba con los lista de dispositivos (las versiones futuras permitirán la configuración a nivel de módulo).
    • Recibe solo un número de serie de dispositivo.
    • Ejecutar tareas de preparación y limpieza en un dispositivo específico
  • Preparadores de orientación multidispositivo (ejemplo en VtsPythonVirtualenvPreparer):
    • Se puede especificar en la configuración del plan de prueba o en el módulo de prueba configuración
    • Recibir todas las series de dispositivos
    • Ejecuta tareas de preparación y limpieza para cada dispositivo o para todos.

Módulos de prueba

Los módulos de prueba obtienen una lista de dispositivos después de que los preparadores de prueba terminan de configurarse el host o los dispositivos. Se ejecuta un módulo de prueba de Python del lado del host para cada dispositivo multidispositivo. en el módulo de prueba. Se puede acceder a los dispositivos Android asignados desde los módulos de prueba de Python. como una lista de DispositivoAndroid objetos:

devices = self.android_devices
device1 = devices[0]
device1_serial = device1.serial

Todos los dispositivos asignados se reservan para el plan de prueba, aunque se haya módulo del plan usa solo un dispositivo.

Comunicación del dispositivo durante la prueba

Las pruebas eficaces de múltiples Android implican la comunicación entre dispositivos. Al desarrollar esas pruebas, debes determinar cómo establecer la comunicación entre los dispositivos asignados. En las siguientes secciones, se proporciona tres ejemplos de comunicación (sin embargo, los desarrolladores de pruebas tienen la libertad de diseñar otras modelos de AA).

Tipo 1: Pruebas de HAL del host

Las pruebas de HAL del host pueden usar controladores de HAL de VTS que envía a los dispositivos Predeterminado:

Figura 2: Prueba de HAL del host

En este caso, sucede lo siguiente:

  • La lógica de prueba se ejecuta en el host.
  • La secuencia de comandos de prueba del lado del host emite llamadas RPC a los controladores en cada dispositivo.
  • El lado del host coordina las interacciones del dispositivo.

Tipo 2: pruebas basadas en agentes del lado del host

En lugar de usar agentes de VTS en el dispositivo, una prueba del lado del host también puede enviar (de aplicación o binario) a cada dispositivo:

Figura 3: Prueba basada en agentes del lado del host.

En este caso, sucede lo siguiente:

  • La lógica de prueba se ejecuta en el host.
  • La app de agente (o objeto binario) se instala en cada dispositivo.
  • La secuencia de comandos de prueba del lado del host emite comandos a las apps de cada dispositivo.
  • El lado del host coordina las interacciones del dispositivo.

Por ejemplo, el Siguiente mil millones de pruebas de usuarios en el repositorio actual de VTS son del host, están basadas en apps, en varios dispositivos.

Tipo 3: pruebas HIDL del objetivo

Las pruebas HIDL multidispositivo del lado del objetivo colocan toda la lógica de la prueba en el lado del dispositivo. binarios, que requiere que las pruebas sincronicen los dispositivos durante la prueba ejecución:

Figura 4: Prueba HIDL basada en objetivos.

En este caso, sucede lo siguiente:

  • La lógica de prueba se ejecuta en los dispositivos.
  • El framework del lado del host proporciona la identificación inicial del dispositivo.
  • El objeto binario de prueba del lado del destino requiere sincronización:
    • El mismo objeto binario de prueba para todos los dispositivos
    • Diferentes objetos binarios de prueba para cada función

Ejemplo: Plan de prueba para varios dispositivos

En este ejemplo, se especifica la configuración de dos dispositivos:

  • El dispositivo 1 incluye un proveedor de compilación y Preparador de destino de VtsDeviceInfoCollector.
  • El dispositivo 2 incluye un preparador FilePusher adicional que envía un grupo de archivos relacionados al dispositivo que administra el host.
<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>

Ejemplo: Secuencia de comandos de prueba de Python del lado del host

Para obtener detalles y ejemplos sobre los preparadores de pruebas, consulta Preparadores de pruebas. Para obtener información completa ejemplo de varios dispositivos, consulta la hello_world_multi Codelab.

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