Un conjunto suele incluir varios módulos de prueba y puede alcanzar un tamaño bastante grande del corpus de prueba. Por ejemplo, el Conjunto de pruebas de compatibilidad (CTS) de Android incluye cientos de módulos y cientos de miles de casos de prueba.
Es posible que una gran cantidad de pruebas fallen debido a un aislamiento deficiente o a que los dispositivos entren en un estado incorrecto.
La función de reintento de la suite está diseñada para abordar esos casos: te permite reintentar solo los errores en lugar de las suites completas para descartar la inestabilidad y el aislamiento deficiente. Si una prueba falla de forma constante, el reintento también falla y obtienes una señal mucho más fuerte de que hay un problema real.
Implementa el reintento del paquete
El reintento de los resultados implica leer los resultados anteriores y volver a ejecutar la invocación anterior.
La interfaz principal que controla el reintento es ITestSuiteResultLoader
, que te permite cargar un resultado anterior y la línea de comandos anterior.
RetryRescheduler
luego, usa esta información para recrear el comando anterior y completar algunos filtros para volver a ejecutar solo las fallas anteriores o las pruebas que no se ejecutaron.
Ejemplo de reintento del conjunto: CTS
La configuración de reintentos en CTS es la siguiente:
<configuration description="Runs a retry of a previous CTS session.">
<object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
<test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />
<logger class="com.android.tradefed.log.FileLogger">
<option name="log-level-display" value="WARN" />
</logger>
</configuration>
Esto se aplica a la mayoría de los conjuntos de pruebas que lo extienden, por ejemplo, VTS.
Se invocaría con el siguiente comando:
cts-tradefed run retry --retry <session>
La sesión se encontraría enumerando los resultados anteriores en la consola de CTS:
cts-tf > l r
Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product
0 2092 30 148 of 999 2018.10.29_14.12.57 cts [serial] P Pixel
Se volverá a cargar y ejecutar el comando original exacto con filtros adicionales. Esto significa que, si el comando original incluía algunas opciones, también formarán parte del reintento.
Por ejemplo:
cts-tradefed run cts-dev -m CtsGestureTestCases
El reintento anterior siempre está vinculado a CtsGestureTestCases
porque reintentamos un comando que solo lo involucró a él.
Configura el reintento para el conjunto de pruebas de estilo CTS
Para que el reintento funcione, los resultados anteriores deben exportarse en formato proto. Se debe agregar lo siguiente:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Esto se debe agregar a la configuración XML del comando principal, y genera la creación de un archivo test-record.pb
en la carpeta de resultados.
Luego, el reintento de CTS carga datos de una combinación del test-record.pb
y el test_result.xml
existente para preparar la invocación del reintento.