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: sharding .
La fragmentación tiene requisitos previos para que el ejecutor de pruebas admita la fragmentación.
La mayoría de los principales ejecutores de pruebas ya admiten la fragmentación, por lo que no se requiere trabajo adicional. Estos ya admiten fragmentación: pruebas de instrumentación, pruebas impulsadas por el lado del host, GTest.
Hay dos tipos de fragmentación que admitimos en Tradefed: local y distribuida. Comparten algunas similitudes, por lo que describiremos las propiedades comunes y luego los detalles de cada uno.
Propiedades comunes
Ambas formas de fragmentación asumen las mismas propiedades de los ejecutores de pruebas: las fragmentaciones deben ser independientes y deterministas . El primer paso de ambos fragmentos es construir la lista ordenada completa de las pruebas y luego dividirlas en diferentes grupos/fragmentos.
La principal diferencia de los formularios de fragmentación está en la forma en que ejecutan las pruebas. Más detalles en las secciones a continuación.
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 conjunto de pruebas que deben ejecutarse y haciendo que cada dispositivo realice pruebas de sondeo cuando está libre (es decir, hecho con la prueba anterior). Esto da como resultado una utilización optimizada del dispositivo. También lo 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 vivir en cualquier lugar y estar conectados a diferentes hosts físicos.
Ejecución
La fragmentación distribuida se produce al crear la lista de pruebas, y el contenido de cada fragmento procederá a ejecutar solo el fragmento solicitado actualmente. Entonces, todos los fragmentos distribuidos crean la misma lista al principio y luego ejecutan un subconjunto mutuamente excluyente, lo que da como resultado que se ejecuten todas las pruebas.
La propiedad principal de este formulario es que los fragmentos no se conocen entre sí y pueden fallar de forma independiente.
El principal inconveniente es que la longitud del fragmento no está necesariamente equilibrada simplemente porque no podemos predecir de antemano el tiempo de ejecución de cada prueba en cada fragmento. La distribución está hecha para tener aproximadamente el mismo número de casos de prueba en cada fragmento.
Opciones
--shard-count XX --shard-index XX
Fragmentación de tokens
La fragmentación de tokens solo se puede usar con fragmentación local. La bandera no estará operativa 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 tienen, como una tarjeta SIM. Es posible que algunas pruebas solo funcionen cuando ese recurso especial esté disponible y, de lo contrario, fallarían.
La fragmentación de tokens es nuestra solución para tales casos de uso. Los módulos de prueba pueden declarar qué recurso especial necesitan en su AndroidTest.xml
y Tradefed enrutará las pruebas a un dispositivo que tenga el recurso.
Configuración XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
El value
del token coincide con 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é pasa si ningún dispositivo puede ejecutar la prueba?
Si ningún dispositivo disponible tiene el recurso que coincida con el módulo de prueba, el módulo de prueba fallará y se omitirá, ya que 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
Pase este indicador de función a la línea de comando principal de Tradefed:
--enable-token-sharding