Una prueba puede fallar por cualquier motivo y, a veces, simplemente volver a ejecutar la prueba es suficiente para que vuelva a pasar (debido a fallas, 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 se traduce en grandes ahorros en el tiempo de ejecución.
Tradefed también admite la ejecución de pruebas varias veces para detectar escamas 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.
Habilitando la función
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 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.
Reintentar fallas
Para volver a intentar las pruebas fallidas, utilice las siguientes opciones:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Esto volverá a intentar el error 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 cierto tiempo, se pueden utilizar las siguientes opciones:
--retry-strategy ITERATIONS --max-testcase-run-count X
¿Cómo se ven los resultados?
Los informadores de resultados recibirán de forma predeterminada los resultados agregados de todos los intentos.
Por ejemplo: una Fail
y un Pass
para RETRY_ANY_FAILURE
darán lugar a un agregado Pass
ya que el reintento logró despejar el fracaso.
Es posible que los reporteros reciban los resultados no agregados. Para hacerlo, necesitan extender la interfaz ISupportGranularResults que declara soporte para los resultados granulares (no agregados).
Detalles de implementacion
Para habilitar el reintento automático para volver a ejecutar fallas 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.