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