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: fragmentación.
La fragmentación tiene requisitos previos para que el ejecutor de pruebas la admita.
La mayoría de los ejecutores de pruebas principales ya admiten la fragmentación, por lo que no se requiere trabajo adicional. Estos ya admiten la fragmentación: pruebas de instrumentación, pruebas controladas por el host y GTest.
Existen 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 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 deterministas. El primer paso de ambas fragmentaciones es compilar la lista ordenada completa de las pruebas y, luego, dividirlas en diferentes grupos o fragmentos.
La principal diferencia de las formas de fragmentación es la manera en que ejecutan las pruebas. Obtén más detalles en las siguientes secciones.
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 se deben ejecutar y haciendo que cada dispositivo sondee las pruebas cuando está libre (es decir, cuando termina la prueba anterior). Esto da como resultado una utilización optimizada del dispositivo. También la 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 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 ejecuta solo el fragmento 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 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.
La principal desventaja es que la longitud del fragmento no siempre está equilibrada, ya que no podemos predecir con anticipación el tiempo de ejecución de cada prueba en cada fragmento. La distribución se realiza para que cada fragmento tenga aproximadamente la misma cantidad de casos de prueba.
Opciones
--shard-count XX --shard-index XX
Fragmentación de tokens
La fragmentación de tokens solo se puede usar con la fragmentación 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. Es posible que algunas pruebas solo funcionen cuando ese recurso especial esté disponible y, de lo contrario, fallen.
La 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
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 ningún dispositivo disponible tiene el recurso que coincide con el módulo de prueba, este 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, 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