Пакет обычно включает в себя несколько тестовых модулей и может достигать довольно большого размера корпуса тестов. Например, пакет тестов совместимости Android (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
Чтобы повторная попытка сработала, предыдущие результаты необходимо экспортировать в формат прототипа. Необходимо добавить следующее:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Его необходимо добавить в конфигурацию XML основной команды, и в результате в папке результатов будет создан файл test-record.pb
.
Затем повторная попытка CTS загружает данные из комбинации файла test-record.pb
и существующего test_result.xml
для подготовки повторного вызова.