Fragmentación de prueba

Cuando el corpus de prueba es grande o el tiempo de ejecución se vuelve largo, 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 uno.

Propiedades comunes

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

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

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 al crear un conjunto de pruebas que deben ejecutarse y hacer 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 crean la misma lista al principio y luego ejecutan un subconjunto mutuamente excluyente, lo que da como resultado que se ejecuten todas las pruebas.

La propiedad principal de este formulario 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 el mismo número 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 usar con fragmentación local. La marca no está operativa en casos de uso de fragmentación no locales. A veces, uno de los dispositivos involucrados en la fragmentación tiene 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 pueden 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 una tarjeta SIM para ejecutarse pero ningún dispositivo tiene una tarjeta SIM, el módulo de prueba falla.

Implementación

Pase este indicador de función a la línea de comando principal de Tradefed:

--enable-token-sharding