Usa el reintento del paquete

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.