Автоматическая повторная попытка тестирования

Тест может не пройти по любой причине, и иногда достаточно просто запустить его снова (из-за нестабильности, например из-за проблем в базовой инфраструктуре). Вы можете настроить Tradefed так, чтобы повторная попытка выполнялась автоматически.

Основная цель автоматического повтора – избежать повторного запуска всех тестов. При этом повторно запускаются только неудачные тесты, что позволяет значительно сэкономить время выполнения.

Tradefed также поддерживает многократное выполнение тестов для обнаружения нестабильности с помощью функции iterations. В этом случае все тесты будут запущены повторно, и тест завершится неудачно, если какая-либо из итераций завершится неудачно.

Как включить автоматическую повторную отправку

Автоматическая повторная попытка контролируется с помощью объекта 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

Как выглядят результаты?

По умолчанию репортеры результатов получают агрегированные результаты всех попыток.

Например, если для RETRY_ANY_FAILURE есть Fail и Pass, то будет получен агрегированный результат Pass, поскольку повторная попытка была успешной.

Репортеры могут получать неагрегированные результаты. Для этого им нужно расширить интерфейс ISupportGranularResults, который объявляет поддержку детализированных (неагрегированных) результатов.

Подробная информация о реализации

Чтобы включить автоматический повторный запуск на уровне тестового случая, реализуйте интерфейс ITestFilterReceiver.

Если вы не можете реализовать ITestFilterReceiver, вы можете реализовать IAutoRetriableTest, чтобы вручную управлять повторным запуском. InstalledInstrumentationsTest – пример реализации этого интерфейса.