Test może zakończyć się niepowodzeniem z dowolnego powodu, a czasami wystarczy po prostu ponowne uruchomienie testu, aby ponownie go zaliczyć (z powodu niestabilności, na przykład spowodowanej problemami w podstawowej infrastrukturze). Możesz skonfigurować Tradefed tak, aby ponawianie próby odbywało się automatycznie.
Istotą automatycznego ponawiania prób jest uniknięcie ponownego uruchamiania wszystkich testów; ponownie uruchamia tylko te, które zakończyły się niepowodzeniem, co skutkuje dużą oszczędnością czasu wykonania.
Tradefed obsługuje także wielokrotne przeprowadzanie testów w celu wykrycia niestabilności za pomocą funkcji iteracji . W takim przypadku wszystkie testy zostaną przeprowadzone ponownie, a jeśli którakolwiek z iteracji zakończy się niepowodzeniem, test zakończy się niepowodzeniem.
Włącz automatyczne ponawianie prób
Automatyczne ponawianie prób jest kontrolowane za pośrednictwem obiektu RetryDecision , który udostępnia dwie opcje włączenia tej funkcji: max-testcase-run-count
i retry-strategy
.
max-testcase-run-count
określa liczbę ponownych prób lub iteracji, które zostaną podjęte. Ustawia górną granicę, aby uniknąć ponawiania prób w nieskończoność. retry-strategy
decyduje o tym, jak ponowić próbę; więcej szczegółów znajdziesz w poniższych sekcjach.
Wyłącz automatyczne ponawianie prób
Użyj następującej opcji:
--retry-strategy NO_RETRY
Ponowne próby nie powiodły się
Aby ponowić próbę niepowodzenia testu, użyj następujących opcji:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Spowoduje to ponawianie niepowodzeń do momentu ich zaliczenia lub osiągnięcia maksymalnej liczby ponownych prób, w zależności od tego, co nastąpi wcześniej.
Iteracje
Aby ponownie uruchamiać testy przez określony czas, można skorzystać z następujących opcji:
--retry-strategy ITERATIONS --max-testcase-run-count X
Jak wyglądają wyniki?
Reporterzy wyników domyślnie otrzymają zagregowane wyniki wszystkich prób.
Na przykład: Fail
i Pass
dla RETRY_ANY_FAILURE
spowodują zagregowane Pass
, ponieważ ponowna próba usunie błąd.
Reporterzy mogą otrzymać niezagregowane wyniki. Aby to zrobić, muszą rozszerzyć interfejs ISupportGranularResults , który deklaruje obsługę szczegółowych (niezagregowanych) wyników.
Szczegóły dotyczące wdrożenia
Aby włączyć automatyczne ponawianie prób w celu ponownego uruchomienia błędów na poziomie przypadku testowego, zaimplementuj ITestFilterReceiver .
Jeśli nie możesz zaimplementować ITestFilterReceiver, możesz zaimplementować IAutoRetriableTest , aby ręcznie kontrolować sposób działania ponownego uruchomienia. InstalledInstrumentationsTest jest przykładową implementacją tego interfejsu.