Test może zakończyć się niepowodzeniem z dowolnego powodu, a czasami wystarczy go ponownie uruchomić, aby uzyskać pozytywny wynik (z powodu niepewności, np. problemów z podstawową infrastrukturą). Możesz skonfigurować TradeFed tak, aby ponawiał próby automatycznie.
Głównym celem automatycznego powtarzania jest unikanie ponownego uruchamiania wszystkich testów. Powtarzane są tylko testy, które zakończyły się niepowodzeniem, co znacznie skraca czas wykonywania.
Tradefed obsługuje również wielokrotne przeprowadzanie testów w celu wykrycia niestabilności za pomocą funkcji iteracji. W takim przypadku wszystkie testy zostaną ponownie uruchomione, a jeśli którakolwiek z itacji zakończy się niepowodzeniem, test zakończy się niepowodzeniem.
Włącz automatyczne ponowne próby
Automatyczne ponowne próby są kontrolowane za pomocą obiektu RetryDecision, który udostępnia 2 opcje włączenia tej funkcji: max-testcase-run-count
i retry-strategy
.
max-testcase-run-count
określa liczbę prób lub iteracji, które zostaną wykonane. Określa górną granicę, która zapobiega ponawianiu prób w nieskończoność.
retry-strategy
określa sposób ponownego próbowania; więcej informacji znajdziesz w następnych sekcjach.
Wyłączanie automatycznych prób
Użyj tej opcji:
--retry-strategy NO_RETRY
Ponowna próba w przypadku niepowodzenia
Aby ponownie spróbować nieudanych testów, użyj tych opcji:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Spowoduje to ponowne próby wykonania zadania, które nie powiodło się wcześniej, dopóki nie zostanie ono wykonane lub dopóki nie zostanie osiągnięta maksymalna liczba prób, zależnie od tego, co nastąpi wcześniej.
Iteracje
Aby powtórzyć testy określoną liczbę razy, możesz użyć tych opcji:
--retry-strategy ITERATIONS --max-testcase-run-count X
Jak wyglądają wyniki?
Raporty wyników domyślnie otrzymują zbiorcze wyniki wszystkich prób.
Na przykład: Fail
i Pass
dla RETRY_ANY_FAILURE
dadzą w wyniku skumulowane Pass
, ponieważ ponowne próby pozwoliły usunąć błąd.
Raportujący mogą otrzymywać wyniki nieskumulowane. W tym celu musi rozszerzyć interfejs ISupportGranularResults, który deklaruje obsługę wyników szczegółowych (niezagregowanych).
Szczegóły implementacji
Aby włączyć automatyczne ponowne próby, aby ponownie uruchomić błędy na poziomie testu, zaimplementuj interfejs ITestFilterReceiver.
Jeśli nie możesz zaimplementować interfejsu ITestFilterReceiver, możesz zaimplementować interfejs IAutoRetriableTest, aby ręcznie kontrolować sposób ponownego uruchamiania. InstalledInstrumentationsTest to przykładowa implementacja tego interfejsu.