Настроить шардинг

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

При непрерывном запуске пакета в лаборатории он обычно разбивается на несколько устройств, чтобы сократить общее время выполнения. Обвязка обычно пытается сбалансировать время выполнения каждого сегмента, чтобы свести к минимуму общее время завершения (когда завершается последний сегмент); но из-за характера некоторых тестов нам не всегда хватает самоанализа, и нам нужно, чтобы владелец модуля настроил какое-то поведение.

Шардируемый или не шардируемый?

Модуль ( AndroidTest.xml ) можно пометить тегом <option name="not-shardable" value="true" /> , чтобы уведомить обвязку о том, что ее не следует сегментировать.

В типичном модуле правильно будет позволить обвязке разбить ваш модуль (поведение по умолчанию). Но в некоторых случаях вы можете переопределить это поведение:

  • Когда установка вашего модуля стоит дорого:

Разделение модуля приводит к тому, что подготовка (установка APK, отправка файла и т. д.), возможно, выполняется один раз для каждого задействованного устройства. Если установка вашего модуля длинная и дорогая, и ее не стоит копировать по сравнению со средой выполнения теста, вы должны пометить свой модуль как не-разбиваемый.

  • Когда количество тестов в вашем модуле невелико:

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

Инструментальные тесты: максимальное количество осколков?

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

Жгут может перегрузить инструментальный тест и получить несколько пустых осколков; сегментирование инструментального теста с пятью тестами в шести сегментах приводит к пяти сегментам с одним тестом и одному сегменту без тестов. Каждый из этих сегментов потребует дорогостоящей установки APK.

Поэтому, когда количество тестов в инструментальном тестовом APK невелико, пометка модуля <option name="not-shardable" value="true" /> позволит системе узнать, что сегментация этого модуля того не стоит.

Средство AndroidJUnitTest имеет специальную опцию, позволяющую указать максимальное количество сегментов, на которые ему разрешено выполнять сегментирование: <option name="ajur-max-shard" value="5" /> .

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

Например, если ваш APK-файл инструментального теста содержит только два тестовых примера, но вы все равно хотите его разбить, значение ajur-max-shard равное 2 , гарантирует, что вы не создаете пустые разбиения.