Reintento automático de pruebas

Una prueba puede fallar por cualquier motivo y, a veces, simplemente volver a ejecutarla es suficiente para que se apruebe (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. Solo vuelve a ejecutar las pruebas con errores, lo que genera un gran ahorro 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 determina la cantidad de reintentos o iteraciones que se intentarán. Establece un límite superior para evitar reintentos infinitos. retry-strategy determina cómo se reintenta la operación. Consulta las siguientes secciones para obtener más detalles.

Inhabilita el reintento automático

Usa la siguiente opción:

--retry-strategy NO_RETRY

Reintenta los errores

Para volver a intentar las pruebas fallidas, usa las siguientes opciones:

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

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

Iteraciones

Para volver a ejecutar las pruebas durante un período, se pueden usar las siguientes opciones:

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

¿Cómo se ven los resultados?

De forma predeterminada, los reporteros de resultados recibirán los 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 reporteros reciban los resultados no agregados. Para ello, deben extender la interfaz ISupportGranularResults que declara la compatibilidad con los resultados detallados (no agregados).

Detalles de implementación

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

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