Набор обычно включает несколько тестовых модулей и может достигать довольно большого размера. Например, Android Compatibility Test Suite (CTS) включает сотни модулей и сотни тысяч тестовых сценариев.
Из-за плохой изоляции или неправильного состояния устройств может быть провалено большое количество тестов.
Функция повторного выполнения набора тестов предназначена для таких случаев. Она позволяет повторно выполнить только тесты, которые не прошли, а не весь набор, чтобы исключить нестабильность и плохую изоляцию. Если тест постоянно не проходит, повторная попытка также не удастся, и вы получите более сильный сигнал о том, что проблема действительно существует.
Как реализовать повторные попытки для набора
При повторной попытке получения результатов считываются предыдущие результаты и повторно выполняется предыдущий вызов.
Основной интерфейс, позволяющий повторить попытку, – это ITestSuiteResultLoader, с помощью которого можно загрузить предыдущий результат и предыдущую командную строку.
RetryRescheduler
затем использует эту информацию, чтобы воссоздать предыдущую команду и заполнить некоторые фильтры, чтобы повторно запустить только предыдущие неудачные или невыполненные тесты.
Пример повторной попытки выполнения набора тестов: CTS
Конфигурация повторных попыток в CTS:
<configuration description="Runs a retry of a previous CTS session.">
<object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
<test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />
<logger class="com.android.tradefed.log.FileLogger">
<option name="log-level-display" value="WARN" />
</logger>
</configuration>
Это относится к большинству наборов, которые его расширяют, например VTS.
Его можно вызвать с помощью следующей команды:
cts-tradefed run retry --retry <session>
Сеанс можно найти, посмотрев предыдущие результаты в консоли CTS:
cts-tf > l r
Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product
0 2092 30 148 of 999 2018.10.29_14.12.57 cts [serial] P Pixel
Исходная команда будет перезагружена и выполнена с дополнительными фильтрами. Это означает, что если в исходной команде были какие-либо параметры, они также будут включены в повторную попытку.
Пример:
cts-tradefed run cts-dev -m CtsGestureTestCases
Повторная попытка всегда будет связана с CtsGestureTestCases, поскольку мы повторяем команду, в которой участвовал только этот объект.
Как настроить повторные попытки для набора тестов CTS
Чтобы повторить попытку, предыдущие результаты нужно экспортировать в формате proto. Добавьте следующие данные:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Его нужно добавить в XML-конфигурацию основной команды. В результате в папке с результатами будет создан файл test-record.pb.
Затем CTS повторно загружает данные из сочетания test-record.pb и существующего test_result.xml, чтобы подготовить повторный вызов.