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

На этой странице описывается, что можно настроить для модуля пакета ( 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 гарантирует, что вы не создаете пустые сегменты.