Тест может не пройти по любой причине, и иногда простого повторного запуска теста достаточно, чтобы он снова прошел (из-за нестабильности, например, из-за проблем в базовой инфраструктуре). Вы можете настроить Tradefed для автоматического выполнения повтора.
Суть автоматического повтора заключается в том, чтобы избежать повторного запуска всех тестов; он повторно запускает только неудавшиеся тесты, что обеспечивает значительную экономию времени выполнения.
Tradefed также поддерживает многократное выполнение тестов для обнаружения нестабильности с помощью функции итераций . В этом случае все тесты будут запущены повторно, и тест завершится неудачей, если какая-либо из итераций завершится неудачей.
Включить автоматическую повторную попытку
Автоматический повтор управляется с помощью объекта RetryDecision , который предоставляет два параметра для включения этой функции: max-testcase-run-count
и retry-strategy
.
max-testcase-run-count
управляет числом повторных попыток или итераций, которые будут предприняты. Он устанавливает верхнюю границу, чтобы избежать бесконечных повторных попыток. retry-strategy
управляет решением о том, как повторить попытку; см. следующие разделы для получения более подробной информации.
Отключить автоматическую повторную попытку
Используйте следующий вариант:
--retry-strategy NO_RETRY
Повтор неудачных попыток
Для повторной попытки пройти тест с ошибками используйте следующие параметры:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Это приведет к повторным попыткам устранения ошибки или пока не будет достигнуто максимальное количество попыток, в зависимости от того, что наступит раньше.
Итерации
Для повторного проведения тестов несколько раз можно использовать следующие опции:
--retry-strategy ITERATIONS --max-testcase-run-count X
Каковы результаты?
По умолчанию отправители отчетов о результатах получат обобщенные результаты всех попыток.
Например: « Fail
и « Pass
для RETRY_ANY_FAILURE
приведут к общему Pass
, поскольку повторная попытка устранила сбой.
Репортеры могут получать неагрегированные результаты. Для этого им необходимо расширить интерфейс ISupportGranularResults , который объявляет поддержку гранулярных (неагрегированных) результатов.
Подробности реализации
Чтобы включить автоматическое повторное выполнение сбоев на уровне тестового случая, реализуйте ITestFilterReceiver .
Если вы не можете реализовать ITestFilterReceiver, вы можете реализовать IAutoRetriableTest , чтобы вручную управлять тем, как работает rerun. InstalledInstrumentationsTest — пример реализации этого интерфейса.