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.
Głównym celem automatycznego powtarzania jest unikanie ponownego uruchamiania wszystkich testów. Powtarzane są tylko testy, które się nie powiodły, co znacznie skraca czas wykonywania.
Tradefed obsługuje też wielokrotne uruchamianie testów w celu wykrywania niespójnoś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ą podjęte. Ustawia górną granicę, aby uniknąć niekończących się prób.
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 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 operacji, aż do jej powodzenia lub osiągnięcia maksymalnej liczby prób, w zależności od tego, co nastąpi wcześniej.
Iteracje
Aby ponownie uruchomić testy określoną liczbę razy, możesz użyć tych opcji:
--retry-strategy ITERATIONS --max-testcase-run-count X
Jak wyglądają wyniki?
Osoby zgłaszające wyniki domyślnie otrzymają 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 (niezbiorczonych) wyników.
Szczegóły implementacji
Aby włączyć automatyczne ponowne próby, które pozwolą na ponowne uruchomienie niepowodzeń 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.