Test może się nie powieść z dowolnego powodu, a czasami wystarczy go ponownie uruchomić, aby zakończył się sukcesem (z powodu niepewnych wyników, np. problemów z infrastrukturą bazową). Możesz skonfigurować Tradefed tak, aby automatycznie przeprowadzał ponowne próby.
Głównym celem automatycznego ponawiania jest uniknięcie ponownego uruchamiania wszystkich testów. Ponownie uruchamiane są tylko testy, które zakończyły się niepowodzeniem, co pozwala znacznie skrócić czas wykonywania.
Tradefed obsługuje też wielokrotne przeprowadzanie testów w celu wykrywania niestabilności za pomocą funkcji iterations. W takim przypadku wszystkie testy zostaną ponownie uruchomione, a jeśli któraś z iteracji zakończy się niepowodzeniem, test również zakończy się niepowodzeniem.
Włącz automatyczne ponawianie próby
Automatyczne ponawianie jest kontrolowane przez obiekt 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ę ponownych prób lub iteracji, które zostaną podjęte. Ustawia górną granicę, aby uniknąć ponawiania w nieskończoność.
retry-strategy
decyduje o tym, jak ponowić próbę. Więcej informacji znajdziesz w kolejnych sekcjach.
Wyłączanie automatycznych ponownych prób
Skorzystaj z tej opcji:
--retry-strategy NO_RETRY
Ponawianie nieudanych prób
Aby ponowić testy, które zakończyły się niepowodzeniem, skorzystaj z tych opcji:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Będzie to ponawiać próbę do momentu, aż się powiedzie lub osiągnie maksymalną liczbę ponownych 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 będą otrzymywać zbiorcze wyniki wszystkich prób.
Na przykład Fail
i Pass
dla RETRY_ANY_FAILURE
spowodują zagregowanie Pass
, ponieważ ponowienie próby pozwoliło usunąć błąd.
Osoby generujące raporty mogą otrzymywać wyniki niezagregowane. W tym celu muszą rozszerzyć interfejs ISupportGranularResults, który deklaruje obsługę szczegółowych (niezagregowanych) wyników.
Szczegóły implementacji
Aby włączyć automatyczne ponawianie prób w przypadku nieudanych testów na poziomie przypadku testowego, zaimplementuj interfejs ITestFilterReceiver.
Jeśli nie możesz wdrożyć interfejsu ITestFilterReceiver, możesz wdrożyć interfejs IAutoRetriableTest, aby ręcznie kontrolować sposób działania ponownego uruchamiania. InstalledInstrumentationsTest to przykładowa implementacja tego interfejsu.