Хабр, привет! Меня зовут Борис. Я Mobile AQA lead в Vivid Money. Это вторая статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов. Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам. В рамках этой статьи мы разберем такие этапы: зачем распараллеливать тесты? распараллеливаем тесты, используя Xcode; распараллеливаем тесты, используя Fastlane. Параллельное тестирование — это ваш билет к более быстрому тестированию. При тестировании приложений важно помнить, что время является важным фактором. 100-процентное тестирование приложения — дело благородное, но не всегда так просто достичь желаемого тестового покрытия. Параллельное тестирование позволяет проводить больше тестов в более сжатые сроки. Представим ситуацию: у вас есть 500 ui-тестов, которые прогоняются за 4 часа. Четыре часа на прогон - это очень много, но если поделить эти 500 тестов на 8 симуляторов, прогон займет 30 минут! Вам понадобится: Xcode версии ≥ 11.7; Тест-план, содержащий ≥ 2 классов с тестами. В тест плане нужно выбрать “Execute in parallel” После этого вы можете просто запустить все тесты в вашем тестовом таргете, и Xcode автоматически создаст несколько клонов выбранного симулятора. Важно отметить, что Xcode делит тесты по классам, а не на равное количество симуляторов. Например: у вас есть 3 класса с тестами: Первый содержит - 3; Второй содержит - 2; Третий содержит - 10. В таком случае xcode создаст три симулятора и запустит на каждом классе с тестами. Xcode не станет вам делить их поровну для каждого симулятора. В качестве примера рассмотрим реализацию на multi_scan - это плагин для fastlane. Представим ситуацию, что у нас 40 тестов, и мы хотим их прогнать на 4 симуляторах. Нас интересуют параметры: batch_count - на сколько частей стоит поделить общее количество тестов для запуска на симуляторе. Например, у вас 40 тестов, и мы указываем значение 4, тогда на каждом симуляторе запустится по 10 тестов. parallel_testrun_count - это количество симуляторов для запуска тестов параллельно. Ограничений по количеству здесь нет, но советую руководствоваться здравым смыслом и протестировать, сколько симуляторов выдерживает ваш билд агент. Указывайте одинаковые цифры в этих двух параметрах. Теперь представим другой пример, в котором нам нужно явно указать тесты для каждого симулятора. Обратим внимание на параметры: 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. Указываем симулятор используя UDID симулятора. Распараллеливание тестов позволяет вам ускорить прохождение ваших тестов в несколько раз! Вы можете это сделать локально через xcode, но он их будет делить по классам, а не на равное количество. Для распараллеливании тестов на ci воспользуйтесь плагином multi_scan для fastlane. Реализация очень простая, а профита много. Параллелизация тестов - это простой и очень полезный инструмент для ускорения прохождения ваших тестов, который я советую использовать всем. Parallel Testing in Xcode 10; Parallelizing UI Tests for iOS Applications; Building from the Command Line with Xcode FAQ Ускоряем прохождение iOS UI-тестов. Часть 1. Запускаем тесты без сборки проекта Интересуешься автоматизацией на iOS? Подписывайся на мой телеграмм-канал, в котором я публикую материалы, которые будут полезны как начинающим, так и опытным iOS-автоматизаторам. AQA Lead & SDET