Ejecutar pruebas con múltiples dispositivos

Esta página lo ayuda a usar el arnés de prueba de Trade Federation con varios dispositivos durante la prueba. Primero debe familiarizarse con el uso normal como se describe en el ejemplo de extremo a extremo .

¿Qué es diferente con múltiples dispositivos?

Varias cosas son diferentes al configurar y ejecutar pruebas de dispositivos múltiples en Trade Federation, en particular:

Cualquier configuración existente de un solo dispositivo es válida para el modo multidispositivo.

TAREAS: Aclare la oración inmediatamente anterior agregando un ejemplo de un caso de uso de un dispositivo relacionado con el modo multidispositivo en una segunda oración.

Configuración de múltiples dispositivos

Este documento asume que ya está familiarizado con la configuración de prueba típica de TF. Así es como se ve una configuración de prueba típica con dos dispositivos:

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

Varias cosas deben mencionarse sobre la estructura:

  • Para cada dispositivo que se necesitará, se espera un <device> .
  • <build_provider> , <target_preparer> , <device_recovery> , <device_requirements> y <device_options> , si es necesario, deben incluirse dentro de la etiqueta <device> ; de lo contrario, se lanzará una excepción.
  • el atributo de name para <device> es obligatorio y debe ser único entre todos los dispositivos presentes en la configuración. Se utiliza para hacer referencia al dispositivo particular asociado con él. Esto permite que su prueba se dirija a un dispositivo en particular.
  • <option> puede tener un alcance global cuando se encuentra en la raíz de la configuración o estar limitado al alcance del dispositivo cuando se especifica dentro de la etiqueta <device> .

Todas las demás reglas aplicables a la configuración de un solo dispositivo siguen siendo aplicables aquí. Consulte el ejemplo de Hello World a continuación para obtener más detalles.

Actualización de la línea de comandos

Al especificar opciones en la línea de comandos de TF, también es posible especificar un ámbito de dispositivo mediante {<device name>} , donde <device name> es el nombre especificado en la configuración XML.

En el ejemplo anterior, se permitieron las siguientes opciones:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Puede apuntar solo a uno de los objetos build_provider del dispositivo usando el nombre del dispositivo, así:

--{device2}device-setup:disable

En este ejemplo, el dispositivo device2 omite la configuración del dispositivo mientras que el dispositivo device1 no lo hace.

¿Cómo selecciona TF los dispositivos?

Trade Federation busca un dispositivo que coincida con los device_requirements del dispositivo (por lo general, el tipo del dispositivo, el producto, etc.) en orden de aparición del dispositivo en la configuración. Cada vez que se asigna un dispositivo, TF intenta asignar el siguiente. Si no es posible asignar todos los dispositivos, se liberarán todos y se volverá a intentar el comando cuando todos los dispositivos coincidan.

¿Cómo prepara TF los dispositivos?

El paso de preparación para dispositivos múltiples es prácticamente el mismo que para dispositivos individuales. Cada dispositivo se prepara llamando al <target_preparer> en orden de aparición dentro del <device> .

También puede usar <multi_target_preparer> especificado en la raíz de la configuración que habilita los pasos de preparación que requieren varios dispositivos, como el emparejamiento de dispositivos. Se ejecuta después del paso target_preparer .

Una alternativa es <pre_multi_target_preparer> que se ejecuta antes del paso target_preparer .

  • <pre_multi_target_preparer> debe usarse para la configuración que se debe realizar antes de la configuración del dispositivo individual.
  • <multi_target_preparer> debe usarse para la configuración que debe realizarse después de las configuraciones de dispositivos individuales.

Por ejemplo: dispositivo flash 1 (target_preparer) dispositivo flash 2 (target_preparer) bluetooth conectar ambos dispositivos (multi_target_preparer)

Escribir una prueba multidispositivo

Al escribir una prueba regular de un solo dispositivo, implementa la interfaz IDeviceTest .

Para que las pruebas reciban los dispositivos bajo prueba, puede implementar IMultiDeviceTest o IInvocationContextReceiver .

IMultiDeviceTest le brinda un mapa directo del dispositivo a su IBuildInfo , mientras que IInvocationContextReceiver luego le brinda el contexto completo (dispositivo, IBuildInfo y metadatos).

A continuación, podrá utilizar las API habituales de ITestDevice que TF pone a disposición para la escritura de prueba.

Aún no existen API para realizar operaciones de un dispositivo a otro, como device1.sync(device2) . Si cree que tiene un caso de uso convincente para recibir asistencia, envíe su razonamiento a la lista de plataformas de Android .

Dispositivos múltiples hola mundo Ejemplo

Agregamos una configuración de ejemplo similar a Hello World: multi-devices.xml También hay un ejemplo de implementación de multi_target_preparer HelloWorldMultiTargetPreparer que muestra cómo recibir la lista de dispositivos y sus compilaciones.

Este es un ejemplo completo que implica:

  • Asignación de dos dispositivos
  • Accediendo a ambos dispositivos a través de un multi_target_preparer
  • Ejecución de una prueba que utiliza los dos dispositivos

Una vez que haya construido Tradefed, puede usar el siguiente comando en el shell TF:

run example/multi-devices

Debería ver algún resultado que contenga lo siguiente:

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'

Necesita dos dispositivos conectados para ejecutar lo anterior. Esto se puede verificar a través de: adb devices

Cuando la invocación está en curso, puede monitorearla como dispositivos individuales con la list i y la list d :

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

Debería poder ver los dispositivos involucrados en cada invocación, así como todos los dispositivos disponibles y su estado respectivo.

Tenga en cuenta que en este ejemplo llamamos a los dos dispositivos en la configuración device1 y device2 ; debe dar un nombre más descriptivo si es posible dependiendo del tipo de dispositivo que realmente espera configurar.