На этой странице описывается, что можно настроить для модуля набора ( AndroidTest.xml
) с помощью шардинга и получить наилучшую производительность скорости во время непрерывного выполнения в лаборатории. Мы попытаемся описать опции в общем виде с обоснованием использования каждой из них.
При непрерывном запуске набора в лаборатории набор обычно разделяется на несколько устройств, чтобы сократить общее время завершения. Обычно обвязка пытается сбалансировать время выполнения каждого шарда, чтобы минимизировать общее время завершения (когда завершается последний шард); но из-за характера некоторых тестов у нас не всегда достаточно интроспекции, и нам нужно, чтобы владелец модуля настроил некоторое поведение.
Шардируемый или нет?
Можно пометить модуль ( AndroidTest.xml
) тегом <option name="not-shardable" value="true" />
чтобы уведомить систему о том, что его не следует шардировать.
В типичном модуле, позволить жгуту шардировать ваш модуль (поведение по умолчанию) — это правильно. Но в некоторых случаях вы можете захотеть переопределить это поведение:
- Если настройка вашего модуля обходится дорого:
Шардинг модуля приводит к подготовке (установка APK, push-файл и т. д.), которая может быть запущена один раз для каждого задействованного устройства. Если настройка вашего модуля долгая и дорогая и не стоит того, чтобы ее реплицировать по сравнению со временем выполнения теста, вам следует пометить свой модуль как не шардируемый.
- Если количество тестов в вашем модуле невелико:
Шардинг модуля приводит к тому, что все тестовые случаи, возможно, выполняются независимо на разных устройствах. Это относится к первому пункту; если количество тестов невелико, в некоторых шардах может оказаться один тест или вообще не быть теста, что сделает любой подготовительный этап довольно дорогим. Например, установка APK для одного тестового случая обычно не стоит того.
Инструментальные испытания: Максимальное количество осколков?
Тест инструментария, запущенный через AndroidJUnitTest , не показывает системе, сколько тестов являются частью инструментария, пока мы фактически не установим и не запустим APK. Эти операции являются дорогостоящими и не могут быть выполнены во время шардинга для всех модулей, входящих в набор.
Жгут может перешардить инструментальный тест и в итоге получить несколько пустых шардов; шардирование инструментального теста с пятью тестами в шести шардах приводит к пяти шардам с одним тестом и одному шарду без тестов. Каждый из этих шардов потребует дорогостоящей установки APK.
Таким образом, если количество тестов в APK-файле инструментального теста невелико, то пометка модуля тегом <option name="not-shardable" value="true" />
позволит системе понять, что сегментирование этого модуля нецелесообразно.
У инструмента AndroidJUnitTest
есть специальная опция, позволяющая указать максимальное количество сегментов, на которые разрешено сегментировать тест: <option name="ajur-max-shard" value="5" />
.
Это позволяет указать максимальное количество раз, когда инструментарий может быть сегментирован независимо от количества сегментов, запрошенных на уровне вызова. По умолчанию инструментарий будет сегментирован на количество сегментов, запрошенных для вызова.
Например, если APK-файл вашего инструментария содержит только два тестовых случая, но вы все равно хотите его сегментировать, то значение ajur-max-shard
равное 2
, гарантирует, что вы не создаете пустые сегменты.