En esta página, se explica cómo usar Trade Federation Test Harness con varios dispositivos durante las pruebas.Primero, debes familiarizarte con el uso normal, como se describe en el ejemplo de extremo a extremo.
¿Qué diferencia hay con varios dispositivos?
Hay varias diferencias cuando se configuran y ejecutan pruebas multidispositivo en Trade Federation, en particular:
Cualquier configuración existente de un dispositivo es válida para el modo multidispositivo.
<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>
Configuración de varios dispositivos
En este documento, se supone que ya conoces la configuración de prueba típica de TF. Este es el aspecto de 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>
Se deben mencionar varias cosas sobre la estructura:
- Para cada dispositivo que se necesite, 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 arrojará una excepción.- El atributo
namepara<device>es obligatorio y debe ser único entre todos los dispositivos presentes en la configuración. Se usa para hacer referencia al dispositivo en particular asociado a él. Esto permite que tu prueba se oriente a un dispositivo en particular. <option>puede tener un alcance global cuando está en la raíz de la configuración o limitarse al alcance del dispositivo cuando se especifica dentro de la<device>etiqueta.
Todas las demás reglas aplicables a la configuración de un solo dispositivo siguen siendo aplicables aquí. Consulta el ejemplo de Hello World a continuación para obtener más detalles.
Actualización de la línea de comandos
Cuando se especifican opciones en la línea de comandos de TF, también es posible especificar un
alcance del dispositivo con {<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
Puedes orientar solo uno de los objetos build_provider del dispositivo con el nombre del dispositivo, de la siguiente manera:
--{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 device_requirements (por lo general, la variante, el producto, etc. del dispositivo) 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 y se volverá a intentar el comando cuando coincidan todos los dispositivos.
¿Cómo prepara TF los dispositivos?
El paso de preparación para varios dispositivos es casi el mismo que para dispositivos individuales.
Cada dispositivo se prepara llamando al <target_preparer> en orden de
aparición dentro del <device>.
También puedes 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
vinculación de dispositivos. Se ejecuta después del paso target_preparer.
Una alternativa es <pre_multi_target_preparer> que se ejecuta antes del
target_preparer paso.
<pre_multi_target_preparer>se debe usar para la configuración que debe realizarse antes de la configuración individual del dispositivo.<multi_target_preparer>se debe usar para la configuración que se debe realizar después de las configuraciones individuales del dispositivo.
Por ejemplo:
flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)
Escribe una prueba multidispositivo
Cuando escribes una prueba normal de un solo dispositivo, implementas la interfaz IDeviceTest.
Para que las pruebas reciban los dispositivos en prueba, puedes implementar IMultiDeviceTest o IInvocationContextReceiver.
IMultiDeviceTest te proporciona un mapa directo del dispositivo a su IBuildInfo mientras que IInvocationContextReceiver te proporciona el contexto completo (dispositivo, IBuildInfo & metadatos).
Luego, podrás usar las APIs de ITestDevice habituales que TF puso a disposición para la escritura de pruebas.
Aún no existen APIs para realizar operaciones de un dispositivo a otro, como device1.sync(device2). Si crees que tienes un caso de uso convincente para
admitir, envía tu razonamiento a la
lista de android-platform.
Ejemplo de Hello World multidispositivo
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 incluye lo siguiente:
- Asignación de dos dispositivos
- Acceso a ambos dispositivos a través de un
multi_target_preparer - Ejecución de una prueba que usa los dos dispositivos
Una vez que compilaste Tradefed, puedes usar el siguiente comando en el shell de TF:
run example/multi-devices
Deberías ver un 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'
Necesitas dos dispositivos conectados para ejecutar lo anterior. Esto se puede verificar a través de adb devices.
Cuando la invocación está en curso, puedes supervisarla como dispositivos individuales con list i y 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ías poder ver los dispositivos involucrados en cada invocación, así como todos los dispositivos disponibles y su estado respectivo.
Ten en cuenta que, en este ejemplo, llamamos a los dos dispositivos en la configuración device1 y device2; debes dar un nombre más descriptivo si es posible, según el tipo de dispositivo que esperas que se configure.