Particionamiento de pruebas

Cuando el corpus de prueba es grande o el tiempo de ejecución se vuelve prolongado, 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 la fragmentación, por lo que no se requiere trabajo adicional. Ya admiten la fragmentación: pruebas de instrumentación, pruebas controladas desde el host y GTest.

En Tradefed, admitimos dos tipos de fragmentación: local y distribuida. Comparten algunas similitudes, por lo que esta página describe las propiedades comunes y, luego, los detalles específicos 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 fragmentos es compilar la lista ordenada completa de las pruebas y, luego, dividirlas en diferentes grupos o fragmentos.

La principal diferencia entre las formas de fragmentación radica en la manera en que ejecutan las pruebas. Encontrarás más detalles en las siguientes secciones.

Fragmentación local

El fragmentado 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

El sharding local aprovecha que todos los dispositivos están conectados al mismo host creando un grupo de pruebas que se deben ejecutar y haciendo que cada dispositivo sondee las pruebas cuando está libre (es decir, cuando terminó con la prueba anterior). Esto genera una utilización optimizada del dispositivo. También lo llamamos fragmentación dinámica.

Opciones

--shard-count XX

Fragmentación distribuida

El sharding 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

El sharding distribuido se produce cuando se compila la lista de pruebas, y el contenido de cada shard ejecuta solo el shard solicitado actualmente. Por lo tanto, todos los fragmentos distribuidos compilan la misma lista al principio y, luego, ejecutan un subconjunto mutuamente exclusivo de ella, lo que hace que se ejecuten todas las pruebas.

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

El principal inconveniente es que la longitud de la partición no siempre está equilibrada, ya que no podemos predecir con anticipación el tiempo de ejecución de cada prueba en cada partición. La distribución se realiza de manera que cada fragmento tenga aproximadamente la misma cantidad de casos de prueba.

Opciones

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

Fragmentación de tokens

El fragmentado de tokens solo se puede usar con el fragmentado local. La marca 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. Algunas pruebas solo funcionan cuando ese recurso especial está disponible y fallarían de lo contrario.

El sharding de tokens es nuestra solución para estos casos de uso. Los módulos de prueba pueden declarar qué recurso especial necesitan en su AndroidTest.xml, y Tradefed dirige 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 pueden ejecutar las pruebas correctamente.

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

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