Fragmentación de prueba

Cuando el corpus de pruebas es grande o el tiempo de ejecución se alarga, ofrecemos la posibilidad de dividir las pruebas en varios dispositivos: sharding .

La fragmentación tiene requisitos previos para que el ejecutor de pruebas admita la fragmentación.

La mayoría de los principales ejecutores de pruebas ya admiten la fragmentación, por lo que no se requiere trabajo adicional. Estos ya admiten fragmentación: pruebas de instrumentación, pruebas impulsadas por el lado del host, GTest.

Hay dos tipos de fragmentación que admitimos en Tradefed: local y distribuida. Comparten algunas similitudes, por lo que esta página describe las propiedades comunes y luego los detalles de cada una.

Propiedades comunes

Ambas formas de fragmentación asumen las mismas propiedades de los corredores de pruebas: los fragmentos deben ser independientes y deterministas . El primer paso de ambos fragmentos es crear la lista ordenada completa de las pruebas y luego dividirlas en diferentes grupos/fragmentos.

La principal diferencia entre los formularios de fragmentación está en la forma en que ejecutan las pruebas. Más detalles en las secciones siguientes.

fragmentación local

La fragmentación local significa que todos los dispositivos involucrados en la ejecución de la invocación fragmentada están conectados al mismo host físico.

Ejecución

La fragmentación local aprovecha que todos los dispositivos están conectados al mismo host creando un grupo de pruebas que deben ejecutarse y haciendo que cada dispositivo realice pruebas de sondeo cuando esté libre (es decir, realizado con la prueba anterior). Esto da como resultado una utilización optimizada del dispositivo. También lo llamamos fragmentación dinámica .

Opciones

--shard-count XX

fragmentación distribuida

La fragmentación distribuida significa que todos los dispositivos involucrados en la ejecución de la invocación fragmentada pueden vivir en cualquier lugar y estar conectados a diferentes hosts físicos.

Ejecución

La fragmentación distribuida se produce al crear la lista de pruebas y el contenido de cada fragmento ejecuta solo el fragmento solicitado actualmente. Entonces, todos los fragmentos distribuidos construyen la misma lista al principio y luego ejecutan un subconjunto mutuamente excluyente de la misma, lo que da como resultado que se ejecuten todas las pruebas.

La propiedad principal de esta forma es que los fragmentos no se conocen entre sí y pueden fallar de forma independiente.

El principal inconveniente es que la longitud del fragmento no está necesariamente equilibrada simplemente porque no podemos predecir de antemano el tiempo de ejecución de cada prueba en cada fragmento. La distribución está hecha para tener aproximadamente la misma cantidad de casos de prueba en cada fragmento.

Opciones

--shard-count XX --shard-index XX

Fragmentación de tokens

La fragmentación de tokens solo se puede utilizar con fragmentación local. La bandera no funciona en casos de uso de fragmentación no local. A veces, uno de los dispositivos involucrados en la fragmentación contiene recursos especiales que otros no tienen, como una tarjeta SIM. Es posible que algunas pruebas solo funcionen cuando ese recurso especial esté disponible y, de lo contrario, fallarían.

La fragmentación de tokens es nuestra solución para tales casos de uso. Los módulos de prueba pueden declarar qué recurso especial necesitan en su AndroidTest.xml y Tradefed enruta las pruebas a un dispositivo que tiene el recurso.

configuración XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

El value del token coincide con TokenProperty de Tradefed y está asociado con un controlador en TokenProviderHelper .

Esto permite que los módulos de prueba se ejecuten en dispositivos que puedan ejecutar las pruebas correctamente.

¿Qué pasa si ningún dispositivo puede ejecutar la prueba?

Si ningún dispositivo disponible tiene el recurso que coincida con el módulo de prueba, el módulo de prueba falla y se omite porque no se puede ejecutar correctamente.

Por ejemplo, si un módulo de prueba solicita que se ejecute una tarjeta SIM pero ningún dispositivo tiene una tarjeta SIM, el módulo de prueba falla.

Implementación

Pase esta bandera de característica a la línea de comando principal de Tradefed:

--enable-token-sharding