Fragmentación de prueba

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

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

La mayoría de los ejecutores de pruebas principales ya admiten el fragmentación, por lo que no se requiere trabajo adicional. Ya admiten la fragmentación: pruebas de instrumentación, pruebas orientadas al host y GTest.

Admitimos dos tipos de fragmentación en Tradefed: local y distribuido. Dado que comparten algunas similitudes, en esta página se describen las propiedades comunes y, luego, los detalles de cada una.

Propiedades comunes

Ambas formas de fragmentación suponen las mismas propiedades de los ejecutores de pruebas: los fragmentos deben ser independientes y determinísticos. El primer paso de ambos particionamientos es compilar la lista ordenada completa de las pruebas y, luego, dividirlas en distintos grupos o fragmentos.

La principal diferencia de los formularios de fragmentación es la forma en que ejecutan las pruebas. Obtén más detalles en las siguientes secciones.

Fragmentación local

El 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 se conectan al mismo host. Para ello, crea un grupo de pruebas que se debe ejecutar y hace que cada dispositivo realice pruebas de sondeo cuando está libre (es decir, cuando se realizó con la prueba anterior). Esto optimiza el uso del dispositivo. También lo llamamos fragmentación dinámica.

Opciones

--shard-count XX

División distribuida

El fragmento distribuido significa que todos los dispositivos involucrados en la ejecución de la invocación fragmentada pueden estar en cualquier lugar y conectarse a diferentes hosts físicos.

Ejecución

La fragmentación distribuida se produce cuando se compila la lista de pruebas, y el contenido de cada fragmento solo ejecuta el fragmento solicitado actualmente. Por lo tanto, todos los fragmentos distribuidos crean la misma lista al principio y, luego, ejecutan un subconjunto mutuamente exclusivo, lo que hace que se ejecuten todas las pruebas.

La propiedad principal de este formulario es que los fragmentos no tienen conocimiento alguno de cada uno y pueden fallar de forma independiente.

La principal desventaja es que la longitud del fragmento no está necesariamente equilibrada simplemente porque no podemos predecir con anticipación el tiempo de ejecución de cada prueba en cada fragmento. La distribución se realiza para tener aproximadamente la misma cantidad de casos de prueba en cada fragmento.

Opciones

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

Fragmentación de tokens

El fragmento de tokens solo se puede usar con el fragmento local. La marca no está operativa en los 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, fallen.

El fragmentación de tokens es nuestra solución para esos 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 de XML

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

El value del token coincide con el 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é sucede si ningún dispositivo puede ejecutar la prueba?

Si no hay dispositivos disponibles que tengan el recurso que coincida con el módulo de prueba, el módulo de prueba fallará y se omitirá porque no puede ejecutarse 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

Pasa esta marca de función a la línea de comandos principal de Tradefed:

--enable-token-sharding