Usar reintento con paquete

Un paquete suele incluir varios módulos de prueba y puede alcanzar el tamaño 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 que los dispositivos entren en mal estado.

El objetivo de la función de reintento de paquete es abordar esos casos: te permite las fallas solo en lugar de los paquetes completos para descartar la fragilidad y un aislamiento deficiente. Si una prueba falla de manera constante, el reintento también falla. y y recibe una señal mucho más fuerte de que hay un problema real.

Implementa el reintento de paquetes

El reintento de obtener resultados implica leer los resultados anteriores y volver a ejecutar invocación anterior.

La interfaz principal que impulsa el reintento es ITestSuiteResultLoader, lo 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 propagar algunos filtros para volver a ejecutar solo las fallas anteriores o las pruebas no ejecutadas.

Ejemplo de reintento del paquete: 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á con lo siguiente:

cts-tradefed run retry --retry <session>

Para encontrar la sesión, se enumeran 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

El comando original exacto se volverá a cargar y a ejecutar con filtros adicionales. Esta significa que si tu comando original incluyera algunas opciones, estas también son parte del reintento.

Por ejemplo:

cts-tradefed run cts-dev -m CtsGestureTestCases

El reintento de lo anterior siempre está vinculado a CtsGestureTestCases porque estamos reintentando un comando que solo lo involucró.

Configura el reintento para un paquete de estilo CTS

Para que el reintento funcione, los resultados anteriores se deben exportar en proto. Debes agregar lo siguiente:

<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />

Se debe agregar a la configuración XML del comando principal Se creará un archivo test-record.pb en la carpeta de resultados.

El reintento de CTS luego carga datos de una combinación de test-record.pb y el test_result.xml existente para preparar la invocación de reintento.