Автоматический повтор теста

Тест может не пройти по любой причине, и иногда достаточно просто перезапустить тест, чтобы он снова прошел (из-за ненадежности, например, из-за проблем в базовой инфраструктуре). Вы можете настроить 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 , чтобы вручную управлять работой повторного запуска. InstalledInstrumentationsTest — пример реализации этого интерфейса.