Una prueba puede fallar por cualquier motivo y, a veces, es suficiente con volver a ejecutarla para que vuelva a aprobarse (debido a inconsistencias, 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 que fallaron, lo que genera grandes ahorros en el tiempo de ejecución.
Tradefed también admite la ejecución de pruebas varias veces para detectar fallas a través de la función de iteraciones. En este caso, todas las pruebas se volverán a ejecutar y la prueba fallará si falla alguna de las iteraciones.
Habilita el reintento automático
La 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 que se vuelva a intentar para siempre.
retry-strategy
toma la decisión de cómo volver a intentarlo. Consulta las siguientes secciones para obtener más detalles.
Inhabilita el reintento automático
Usa la siguiente opción:
--retry-strategy NO_RETRY
Vuelve a intentar las fallas
Para volver a intentar las pruebas fallidas, usa las siguientes opciones:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Esto volverá a intentar la falla hasta que finalice o hasta que se alcance la cantidad máxima de reintentos, lo que ocurra primero.
Iteraciones
Para volver a ejecutar pruebas varias veces, puedes 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 los resultados agregados de todos los intentos.
Por ejemplo, un Fail
y un Pass
para RETRY_ANY_FAILURE
darán como resultado un Pass
agregado, ya que el reintento logró borrar la falla.
Los reporteros pueden recibir 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 los reintentos automáticos para volver a ejecutar fallas a nivel del caso de prueba, implementa ITestFilterReceiver.
Si no puedes implementar ITestFilterReceiver, puedes implementar IAutoRetriableTest para controlar de forma manual cómo funciona la repetición. InstalledInstrumentationsTest es una implementación de ejemplo de esa interfaz.