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

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