Una prueba puede fallar por cualquier motivo y, a veces, simplemente volver a ejecutarla es suficiente para que se apruebe nuevamente (debido a problemas, como problemas en la infraestructura subyacente). Puede configurar Tradefed para que realice el reintento automáticamente.
El núcleo del reintento automático es evitar volver a ejecutar todas las pruebas; vuelve a ejecutar solo las pruebas fallidas, lo que genera grandes ahorros en el tiempo de ejecución.
Tradefed también admite la ejecución de pruebas varias veces para detectar debilidad a través de la función de iteraciones . En este caso, se volverán a ejecutar todas las pruebas y la prueba fallará si falla alguna de las iteraciones.
Habilitar el reintento automático
El reintento automático se controla mediante el objeto RetryDecision que proporciona dos opciones para habilitar la función: max-testcase-run-count
y retry-strategy
.
max-testcase-run-count
controla el número de reintentos o iteraciones que se intentarán. Establece un límite superior para evitar volver a intentarlo para siempre. retry-strategy
impulsa la decisión de cómo reintentar; consulte las siguientes secciones para obtener más detalles.
Desactivar el reintento automático
Utilice la siguiente opción:
--retry-strategy NO_RETRY
Errores de reintento
Para volver a intentar errores de prueba, utilice las siguientes opciones:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Esto reintentará el fallo hasta que pase o hasta que se alcance el número máximo de reintentos, lo que ocurra primero.
Iteraciones
Para volver a ejecutar las pruebas durante varias veces, se pueden utilizar las siguientes opciones:
--retry-strategy ITERATIONS --max-testcase-run-count X
¿Cómo son los resultados?
Los informantes de resultados recibirán de forma predeterminada 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 el error.
Es posible que los periodistas reciban los resultados no agregados. Para ello, deben ampliar la interfaz ISupportGranularResults que declara compatibilidad con resultados granulares (no agregados).
Detalles de implementacion
Para habilitar el reintento automático para volver a ejecutar errores en el nivel de caso de prueba, implemente ITestFilterReceiver .
Si no puede implementar ITestFilterReceiver, puede implementar IAutoRetriableTest para controlar manualmente cómo funciona la repetición. InstalledInstrumentationsTest es una implementación de ejemplo de esa interfaz.