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

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

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

По умолчанию пользователи, отправляющие отчеты о результатах, будут получать сводные результаты всех попыток.

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

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

Детали реализации

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

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