Reintento automático de pruebas

Una prueba puede fallar por cualquier motivo y, a veces, volver a ejecutarla es suficiente para que vuelva a pasar (debido a la inestabilidad, como problemas en la infraestructura subyacente). Puedes configurar Tradefed para que realice el reintento automáticamente.

El objetivo principal del reintento automático es evitar volver a ejecutar todas las pruebas. Vuelve a ejecutar solo las pruebas con errores, lo que genera grandes ahorros en el tiempo de ejecución.

Tradefed también admite la ejecución de pruebas varias veces para detectar la inestabilidad a través de la función iteraciones. En este caso, se volverán a ejecutar todas las pruebas, y la prueba fallará si falla alguna de las iteraciones.

Habilitar reintento automático

El reintento automático se controla a través del objeto RetryDecision que proporciona dos opciones para habilitar la función: max-testcase-run-count y retry-strategy.

max-testcase-run-count controla la cantidad de reintentos o iteraciones que se intentarán. Establece un límite superior para evitar reintentar indefinidamente. retry-strategy controla la decisión de cómo volver a intentar. Consulta las siguientes secciones para obtener más detalles.

Inhabilitar reintento automático

Usa la siguiente opción:

--retry-strategy NO_RETRY

Reintentar fallas

Para reintentar las fallas de prueba, usa las siguientes opciones:

--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X

Esto volverá a intentar la falla hasta que pase o hasta que se alcance la cantidad máxima de reintentos, lo que ocurra primero.

Iteraciones

Para volver a ejecutar pruebas varias veces, se pueden usar las siguientes opciones:

--retry-strategy ITERATIONS --max-testcase-run-count X

¿Cómo se ven los resultados?

De forma predeterminada, los generadores de informes de resultados recibirán resultados agregados de todos los intentos.

Por ejemplo, un Fail y un Pass para RETRY_ANY_FAILURE generarán un Pass agregado, ya que el reintento logró borrar la falla.

Es posible que los generadores de informes reciban los resultados no agregados. Para ello, deben extender la interfaz ISupportGranularResults que declara compatibilidad con los resultados granulares (no agregados).

Detalles de la implementación

Para habilitar el reintento automático para volver a ejecutar fallas a nivel del caso de prueba, implementa ITestFilterReceiver.

Si no puedes implementar ITestFilterReceiver, puedes implementar IAutoRetriableTest para controlar manualmente cómo funciona la nueva ejecución. InstalledInstrumentationsTest es una implementación de ejemplo de esa interfaz.