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