Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Ejecute pruebas con varios dispositivos

Esta página le ayuda a usar el arnés de prueba de la Federación de Comercio con varios dispositivos durante la prueba. Primero debe familiarizarse con el uso normal como se describe en el ejemplo de un extremo a otro .

¿Qué es diferente con varios dispositivos?

Varias cosas son diferentes al configurar y ejecutar pruebas multidispositivo en Trade Federation, en particular:

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

TODO: Aclare la oración inmediatamente anterior agregando un ejemplo de un caso de uso de un dispositivo en lo que respecta al modo de múltiples dispositivos en una segunda oración.

Configuración de varios dispositivos

Este documento asume que ya está familiarizado con la configuración típica de prueba 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>

Es necesario mencionar varias cosas 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 a él. Esto permite que su prueba apunte a un dispositivo en particular.
  • <option> puede tener un alcance global cuando está 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 comando TF, también es posible especificar un alcance de dispositivo usando {<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, device2 omite la configuración del dispositivo mientras que device1 no lo hace.

¿Cómo selecciona TF los dispositivos?

Trade Federation busca un dispositivo que coincida con los device_requirements dispositivo (normalmente, el tipo de dispositivo, producto, etc.) en el 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 TF prepara 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 múltiples 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 debe realizarse 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 conecta ambos dispositivos (multi_target_preparer)

Escribe 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 de ITestDevice habituales que TF puso 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 soporte, envíe su razonamiento a la lista de plataformas de Android .

Ejemplo de hola mundo de varios dispositivos

multi_target_preparer 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 involucra:

  • Asignar dos dispositivos
  • Accediendo a ambos dispositivos a través de un multi_target_preparer
  • Ejecutando una prueba que usa los dos dispositivos

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

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 progreso, 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 sus respectivos estados.

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.