Тестовый шардинг

Когда корпус тестов большой или время выполнения становится большим, мы предлагаем возможность разделения тестов на несколько устройств: шардинг .

Шардинг имеет необходимые условия для того, чтобы средство выполнения тестов поддерживало шардинг.

Большинство основных средств запуска тестов уже поддерживают шардинг, поэтому никаких дополнительных действий не требуется. Они уже поддерживают шардинг: инструментальные тесты, тесты на стороне хоста, GTest.

В Tradefed мы поддерживаем два типа шардинга: локальный и распределенный. У них есть некоторые сходства, поэтому на этой странице описаны общие свойства, а затем особенности каждого из них.

Общие свойства

Обе формы шардинга предполагают одинаковые свойства бегунов тестов: шарды должны быть независимыми и детерминированными . Первым шагом обоих сегментов является создание полного упорядоченного списка тестов, а затем разделение его на разные группы/осколки.

Основное отличие форм шардинга заключается в способе выполнения тестов. Подробности в разделах ниже.

Локальное шардинг

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

Исполнение

Локальное сегментирование использует преимущества подключения всех устройств к одному хосту путем создания пула тестов, которые необходимо выполнить, и проведения опроса каждого устройства, когда оно свободно (то есть выполняется вместе с предыдущим тестом). Это приводит к оптимизации использования устройства. Мы также называем это динамическим шардингом .

Параметры

--shard-count XX

Распределенное шардинг

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

Исполнение

Распределенное шардирование происходит при построении списка тестов, и содержимое каждого шарда выполняет только запрошенный в данный момент сегмент. Таким образом, все распределенные сегменты сначала создают один и тот же список, а затем выполняют его взаимоисключающее подмножество, в результате чего выполняются все тесты.

Главным свойством этой формы является то, что осколки совершенно не знают друг о друге и могут выйти из строя независимо друг от друга.

Основным недостатком является то, что длина сегмента не обязательно сбалансирована просто потому, что мы не можем заранее предсказать время выполнения каждого теста в каждом сегменте. Распределение сделано так, чтобы в каждом шарде было примерно одинаковое количество тестовых случаев.

Параметры

--shard-count XX --shard-index XX

Шардинг токенов

Шардинг токена можно использовать только с локальным шардингом. Флаг неработоспособен в случаях использования нелокального сегментирования. Иногда одно из устройств, участвующих в шардинге, содержит специальные ресурсы, которых нет у других, например SIM-карту. Некоторые тесты могут работать только тогда, когда доступен этот специальный ресурс, и в противном случае завершится неудачей.

Шардинг токенов — наше решение для таких случаев. Тестовые модули могут объявлять, какой специальный ресурс им нужен, в своем AndroidTest.xml , а Tradefed направляет тесты на устройство, имеющее этот ресурс.

XML-конфигурация

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

value токена соответствует TokenProperty Tradefed и связано с обработчиком в TokenProviderHelper .

Это позволяет запускать тестовые модули на устройствах, которые могут правильно выполнять тесты.

Что, если ни одно устройство не сможет выполнить тест?

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

Например, если тестовый модуль запрашивает запуск SIM-карты, но ни одно устройство не имеет SIM-карты, тестовый модуль завершится сбоем.

Выполнение

Передайте этот флаг функции в главную командную строку Tradefed:

--enable-token-sharding