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