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

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