Un test potrebbe non riuscire per qualsiasi motivo e, a volte, è sufficiente eseguirlo di nuovo per farlo superare (a causa di irregolarità, ad esempio problemi nell'infrastruttura sottostante). Puoi configurare Tradefed per eseguire automaticamente il nuovo tentativo.
L'obiettivo principale del nuovo tentativo automatico è evitare di eseguire di nuovo tutti i test. Vengono eseguiti di nuovo solo i test non riusciti, con un notevole risparmio di tempo di esecuzione.
Tradefed supporta anche l'esecuzione dei test più volte per rilevare le irregolarità tramite la funzionalità iterations (iterazioni). In questo caso, tutti i test verranno eseguiti di nuovo e il test non riuscirà se una delle iterazioni non va a buon fine.
Abilita nuovo tentativo automatico
Il nuovo tentativo automatico viene 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 nuovi tentativi o iterazioni che verranno eseguiti. Imposta un limite superiore per evitare di riprovare all'infinito.
retry-strategy determina la decisione su come riprovare. Per maggiori dettagli, consulta le sezioni seguenti.
Disabilita nuovo tentativo automatico
Utilizza la seguente opzione:
--retry-strategy NO_RETRY
Riprova in caso di errori
Per riprovare in caso di errori nei test, utilizza le seguenti opzioni:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Verrà eseguito un nuovo tentativo in caso di errore fino a quando il test non verrà superato o fino al raggiungimento del numero massimo di nuovi tentativi, a seconda di quale condizione si verifica prima.
Iterazioni
Per eseguire di nuovo i test per un determinato numero di volte, puoi utilizzare le seguenti opzioni:
--retry-strategy ITERATIONS --max-testcase-run-count X
Che aspetto hanno i risultati?
Per impostazione predefinita, i reporter dei risultati riceveranno i risultati aggregati di tutti i tentativi.
Ad esempio, un Fail e un Pass per RETRY_ANY_FAILURE genereranno un Pass aggregato, poiché il nuovo tentativo è riuscito a risolvere l'errore.
È possibile che i reporter ricevano i risultati non aggregati. Per farlo, devono estendere l' interfaccia ISupportGranularResults che dichiara il supporto per i risultati granulari (non aggregati).
Dettagli di implementazione
Per consentire al nuovo tentativo automatico di eseguire di nuovo gli errori a livello di caso di test, implementa ITestFilterReceiver.
Se non puoi implementare ITestFilterReceiver, puoi implementare IAutoRetriableTest per controllare manualmente il funzionamento della nuova esecuzione. InstalledInstrumentationsTest è un'implementazione di esempio di questa interfaccia.