Чтобы поддерживать такие масштабы автотестирования, мы написали тест-раннер Emcee, который умеет скейлиться в ширину по физическим машинкам. Он доступен
в нашем Гитхаб-репозитории.Что у нас с тестамиЧисло тестов в приложении Авито постоянно растёт. Сейчас больше всего — 1500 штук — быстрых компонентных UI-тестов. Они совмещают в себе интерактивность XCUI-тестов со скоростью unit-тестов. По сути это экраны в изоляции, но с интерактивными проверками их работы. Мы запускаем UI-тесты на каждый pull request на двух версиях iOS — самой старой поддерживаемой и самой новой. То есть фактически запускается 3000 тестов.
А вот от XCUI-тестов на pull request мы отказались уже как год: они завязаны на бэкенд (end-to-end), а он любит жить своей жизнью. В момент прогона может происходить обновление СУБД или выкатка новых версий сервисов, которые всё ломают. Однако XCUI-тесты гоняются на релизе, а также каждую ночь с доставкой отчётов в команду утром. Таких тестов осталось порядка 600.
Даже если представить, что каждый компонентный тест длится в среднем 3 секунды, то 3000 х 3 даст 9000 секунд. А это 2,5 часа. Тем не менее, билд с тестами у нас идёт около 15 минут.
Тест-раннер EmceeСкорость билда достигается с помощью нашего
тест-раннера Emcee. Он:
- Управляет симуляторами на нашей ферме Apple-компьютеров.
- Организует очередь из тестов.
- Пишет аналитику по выполнению тестов в Grafana.
- Производит нужное количество перезапусков.
- Запускает тесты только там, где они могут пройти. Например, только на компьютерах с установленным симулятором и Xcode нужной версии.
- Выделяет максимально возможные ресурсы на выполнение набора тестов в зависимости от приоритета.
- Интегрирует результаты тестового прогона в нашу инфраструктуру: тестохранилку и систему отчётов.
Точные цифрыНаши компонентные тесты на PR суммарно длятся 6 часов: как минимум столько времени их гонял бы один миник с одним симулятором. Фактически же билд проходит за 15 минут.
Наши 600 end-to-end XCUI-тестов суммарно идут 41 час. Они запускаются под четырьмя разными версиями iOS, и на деле всё распараллеливается и проходит за 50 минут.
Что нужно, чтобы начать использовать Emcee у себя нужны:
- Желание разобраться в новом. Мы проделали большую работу, чтобы всё для вас упростить.
- Компьютеры Mac. Мы используем Mac mini, потому что их ещё как-то можно запихать в стойки. Но можно юзать и ноутбуки, если у вас валяются свободные. А ещё можно арендовать Apple-машины у провайдеров.
- Ваше iOS-приложение с тестами.
Мы написали
короткий гайд по тому, как можно быстро стартовать.
Кому подойдёт EmceeСмело пробуйте Emcee, если:
- Хотите уменьшить time to market своего приложения и делаете ставку на автотесты.
- Тесты стали занимать значительное время при регрессе и на pull request-ах, и теперь вы ищете способ их ускорить.
- Хотите почти полностью уйти от ручного тестирования и понимаете, что тестов потребуется много, но не смогли найти инструмент для их прогона.
- Любите классные технологии и хотите заколлабиться с инженерами Авито.
Что говорят те, кто уже использует Emcee