Cuando el corpus de pruebas es grande o el tiempo de ejecución se alarga, 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 ningún trabajo adicional. Estos ya admiten la fragmentación: pruebas de instrumentación, pruebas impulsadas por el host y GTest.
En Tradefed, admitimos dos tipos de fragmentación: local y distribuida. 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 diferencia principal entre los formularios de fragmentación está en 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
El fragmentación local aprovecha todos los dispositivos que se conectan al mismo host, ya que crea un grupo de pruebas que se deben ejecutar y hace que cada dispositivo sondee las pruebas cuando esté libre (es decir, cuando haya terminado 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
Divisió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 falle de otra manera.
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 tenga 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, 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 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