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 automatycznie powtarzał próby.
Podstawą automatycznego ponawiania jest unikanie ponownego uruchamiania wszystkich testów. Uruchamiane są tylko te testy, których nie udało się przeprowadzić, co znacznie oszczędza 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ą uruchomione ponownie, a jeśli któraś z iteracji się nie powiedzie, 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. Ustawia górną granicę, aby uniknąć niekończącego się próbowania.
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
Nieudane ponowienia
Aby ponownie wykonać testy, które zakończyły się niepowodzeniem, 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. Aby to zrobić, muszą rozszerzyć interfejs ISupportGranularResults, który deklaruje obsługę szczegółowych (niezbiorczych) wyników.
Szczegóły implementacji
Aby włączyć automatyczne ponawianie próby w celu ponownego uruchomienia błędów na poziomie przypadku testowego, zaimplementuj 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.