Un paquete suele incluir varios módulos de prueba y puede alcanzar un tamaño de corpus de prueba bastante grande. 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 falle debido a un aislamiento deficiente o a que los dispositivos entren en un estado incorrecto.
La función de reintento de suite está diseñada para abordar esos casos: te permite reintent solo las fallas en lugar de las suites completas para descartar la inestabilidad y un aislamiento deficiente. Si una prueba falla de forma constante, el reintento también falla y obtienes una señal mucho más clara de que hay un problema real.
Implementa el reintento de paquetes
La reintento de resultados implica leer los resultados anteriores y volver a ejecutar la invocacin anterior.
La interfaz principal que impulsa el reintento es ITestSuiteResultLoader
, que te permite cargar un resultado anterior y la línea de comandos anterior.
Luego, RetryRescheduler
usa esta información para volver a crear el comando anterior y propagar algunos filtros para volver a ejecutar solo las fallas anteriores o las pruebas que no se ejecutaron.
Ejemplo de reintento de suite: CTS
La configuración de reintentos en el 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 paquetes que lo extienden, por ejemplo, VTS.
Se invocaría con lo siguiente:
cts-tradefed run retry --retry <session>
Para encontrar la sesión, se deben enumerar 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 a ejecutar el comando original exacto con filtros adicionales. Esto significa que, si tu comando original incluía algunas opciones, también forman parte del reintento.
Por ejemplo:
cts-tradefed run cts-dev -m CtsGestureTestCases
El reintento de lo anterior siempre está vinculado a CtsGestureTestCases
porque estamos volviendo a intentar un comando que solo lo incluía.
Configura el reintento para el paquete de estilo CTS
Para que la 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 un archivo test-record.pb
en la carpeta de resultados.
Luego, la reintento de CTS carga datos de una combinación de test-record.pb
y el test_result.xml
existente para preparar la invocación de reintento.