Usar reintento con paquete

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 invocaci￳n 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.