Cuando el corpus de prueba es grande o el tiempo de ejecución es 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. Comparten algunas similitudes, por lo que en esta página se describen las propiedades comunes y, luego, las especificaciones 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.
Divisió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 todos los dispositivos que se conectan a la misma de host creando un grupo de pruebas que deba ejecutarse y haciendo que cada Sondeo del dispositivo realiza pruebas 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.
El principal inconveniente es que la longitud del fragmento no necesariamente se equilibra 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
División de tokens
La fragmentación de tokens solo se puede usar con fragmentación local. La bandera es sin funcionar en casos de uso de fragmentación no local. A veces, uno de los dispositivos involucrados en la fragmentación tiene recursos especiales que otros no, como una SIM tarjeta. Es posible que algunas pruebas solo funcionen cuando ese recurso especial esté disponible y falle de otra manera.
La solución a estos casos de uso es la fragmentación de tokens. Los módulos de prueba pueden hacer lo siguiente:
declarar qué recurso especial necesita en su AndroidTest.xml
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, el recurso coincide con el módulo de prueba. el módulo de prueba falló y se omitió porque no puede ejecutarse correctamente.
Por ejemplo, si un módulo de prueba solicita que se ejecute una tarjeta SIM, pero ningún dispositivo tiene una 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