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

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

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

Разделяемый или не шардабельный?

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

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

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

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

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

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

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

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

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

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

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

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

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