
Хабр, привет!
Меня зовут Борис. Я Mobile AQA lead в Vivid Money.
Это вторая статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов.
Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам.
В рамках этой статьи мы разберем такие этапы:
-
зачем распараллеливать тесты?
-
распараллеливаем тесты используя Xcode;
-
распараллеливаем тесты используя Fastlane.
Зачем распараллеливать тесты?
Параллельное тестирование — это ваш билет к более быстрому тестированию. При тестировании приложений важно помнить, что время является важным фактором. 100-процентное тестирование приложения — дело благородное, но не всегда так просто достичь желаемого тестового покрытия. Параллельное тестирование позволяет проводить больше тестов в более сжатые сроки.
Представим ситуацию: у вас есть 500 ui-тестов, которые прогоняются за 4 часа. Четыре часа на прогон — это очень много, но если поделить эти 500 тестов на 8 симуляторов, прогон займет 30 минут!

Распараллеливаем тесты используя Xcode
Вам понадобится:
-
Xcode версии ≥ 11.7;
-
Тест-план, содержащий ≥ 2 классов с тестами.
В тест плане нужно выбрать “Execute in parallel”

После этого вы можете просто запустить все тесты в вашем тестовом таргете, и Xcode автоматически создаст несколько клонов выбранного симулятора. Важно отметить, что Xcode делит тесты по классам, а не на равное количество симуляторов. Например: у вас есть 3 класса с тестами:
-
Первый содержит — 3;
-
Второй содержит — 2;
-
Третий содержит — 10.
В таком случае xcode создаст три симулятора и запустит на каждом классе с тестами. Xcode не станет вам делить их поровну для каждого симулятора.

Распараллеливаем тесты используя Fastlane
В качестве примера рассмотрим реализацию на multi_scan — это плагин для fastlane.
Представим ситуацию, что у нас 40 тестов, и мы хотим их прогнать на 4 симуляторах.
multi_scan( project: 'yourProjectPath', scheme: 'SwiftRadioUITests', fail_build: false, device: 'iPhone 8' batch_count: 4, parallel_testrun_count: 4 )
Нас интересуют параметры:
-
batch_count — на сколько частей стоит поделить общее количество тестов для запуска на симуляторе. Например, у вас 40 тестов, и мы указываем значение 4, тогда на каждом симуляторе запустится по 10 тестов.
-
parallel_testrun_count — это количество симуляторов для запуска тестов параллельно. Ограничений по количеству здесь нет, но советую руководствоваться здравым смыслом и протестировать, сколько симуляторов выдерживает ваш билд агент.
Указывайте одинаковые цифры в этих двух параметрах.
Теперь представим другой пример, в котором нам нужно явно указать тесты для каждого симулятора.
multi_scan( workspace: 'yourProjectPath', scheme: 'SwiftRadioUITests', fail_build: false, destination: 'platform=iOS Simulator,name=iPhone 8,OS=13.1' parallel_testrun_count: 2, batches: [ [ 'SwiftRadioUITests/RegressionTests/testExample1', 'SwiftRadioUITests/RegressionTests/testExample2', 'SwiftRadioUITests/RegressionTests/testExample3' ], [ 'SwiftRadioUITests/RegressionTests/testExample4', 'SwiftRadioUITests/RegressionTests/testExample5', 'SwiftRadioUITests/RegressionTests/testExampl' ] ] )
Обратим внимание на параметры:
-
batches — это массив с вашими тестами. Его следует использовать, если вы хотите явно указать какие тесты должны прогонять на каждом симуляторе. В массиве вы должны указать путь к вашему тесту по след схеме: Имя тестового таргета/ Имя класса с тестами/ Имя теста.
-
destination — это аргумент, в котором вы можете указать определенный: симулятор, физический девайс, mac.
Разберем более подробно destination:
|
Ключ |
Описание |
Пример значения |
|
platform |
Поддерживаемая платформа |
iOS Simulator, tvOS Simulator, watchOS Simulator |
|
name |
Полное имя симулятора, которое можно найти в “Devices and Simulators” |
iPhone 8, Apple TV, Apple Watch SE — 40mm |
|
id |
UDID вашего устройства. UDID можно достать используя утилиту simctl |
6DC4A7BA-EA7F-40D6-A327-A0A9DF82F7F6 |
|
OS |
Версия iOS, tvOS, watchOS. Указываем версию, которую поддерживает Xcode |
OS=13.1 |
Немного примеров для понимания destination:
-
Указываем симулятор iPhone X на версии ОС 13.1.
-destination 'platform=iOS Simulator,name=iPhone X,OS=13.1' -
Указываем симулятор используя UDID симулятора.
-destination 'platform=iOS Simulator,id=6DC4A7BA-EA7F-40D6-A327-A0A9DF82F7F6'
Самое важное
-
Распараллеливание тестов позволяет вам ускорить прохождение ваших тестов в несколько раз!
-
Вы можете это сделать локально через xcode, но он их будет делить по классам, а не на равное количество.
-
Для распараллеливании тестов на ci воспользуйтесь плагином multi_scan для fastlane. Реализация очень простая, а профита много.
Параллелизация тестов — это простой и очень полезный инструмент для ускорения прохождения ваших тестов, который я советую использовать всем.
Полезные статьи на эту тему:
Навигация по статьям:
Интересуешься автоматизацией на iOS? Подписывайся на мой телеграмм-канал, в котором я публикую материалы, которые будут полезны как начинающим, так и опытным iOS-автоматизаторам.
ссылка на оригинал статьи https://habr.com/ru/company/vivid_money/blog/652397/
Добавить комментарий