Un test potrebbe fallire per qualsiasi motivo e talvolta è sufficiente eseguirlo nuovamente per farlo passare di nuovo (a causa di instabilità, ad esempio a causa di problemi nell'infrastruttura sottostante). È possibile configurare Tradefed per eseguire automaticamente il nuovo tentativo.
Lo scopo principale del tentativo automatico è evitare di rieseguire tutti i test; riesegue solo i test falliti, con conseguente notevole risparmio di tempo di esecuzione.
Tradefed supporta inoltre l'esecuzione di test più volte per rilevare instabilità tramite la funzionalità di iterazione . In questo caso, tutti i test verranno rieseguiti e il test fallirà se una qualsiasi delle iterazioni fallisce.
Abilita il nuovo tentativo automatico
Il nuovo tentativo automatico è controllato tramite l' oggetto RetryDecision che fornisce due opzioni per abilitare la funzionalità: max-testcase-run-count
e retry-strategy
.
max-testcase-run-count
determina il numero di tentativi o iterazioni che verranno tentati. Imposta un limite superiore per evitare di riprovare all'infinito. retry-strategy
guida la decisione su come riprovare; vedere le sezioni seguenti per maggiori dettagli.
Disabilita il nuovo tentativo automatico
Utilizza la seguente opzione:
--retry-strategy NO_RETRY
Riprovare gli errori
Per riprovare i test non riusciti, utilizzare le seguenti opzioni:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Questo riproverà l'errore finché non verrà superato o finché non verrà raggiunto il numero massimo di tentativi, a seconda di quale evento si verifica per primo.
Iterazioni
Per rieseguire i test per un certo numero di volte, è possibile utilizzare le seguenti opzioni:
--retry-strategy ITERATIONS --max-testcase-run-count X
Come sono i risultati?
I reporter dei risultati per impostazione predefinita riceveranno i risultati aggregati di tutti i tentativi.
Ad esempio: un Fail
e un Pass
per RETRY_ANY_FAILURE
risulteranno in un Pass
aggregato poiché il nuovo tentativo è riuscito a cancellare l'errore.
È possibile che i giornalisti ricevano i risultati non aggregati. A tale scopo, devono estendere l' interfaccia ISupportGranularResults che dichiara il supporto per i risultati granulari (non aggregati).
Dettagli di implementazione
Per abilitare il nuovo tentativo automatico per rieseguire gli errori a livello di test case, implementare ITestFilterReceiver .
Se non è possibile implementare ITestFilterReceiver, è possibile implementare IAutoRetriableTest per controllare manualmente il funzionamento della riesecuzione. InstalledInstrumentationsTest è un esempio di implementazione di tale interfaccia.