Раннер Emcee. Всем айосерам по тестовой ферме

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В iOS-приложении Авито куча UI-тестов — вы это уже наверняка знаете, потому что мы говорим про них постоянно. Это позволяет нам релизиться раз в неделю, причём регрессионное тестирование с ручными проверками мы проводим раз в две недели. Между ними в релиз идёт приложение, которое протестировано только нашими UI- и unit-тестами.

Чтобы поддерживать такие масштабы автотестирования, мы написали тест-раннер 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

«Мы обязательно запускаем UI-тесты при мерже фиче-ветки в мастер-ветку или по запросу. Когда у нас было порядка 150 тестов, их прогон занимал около 10 минут на одном минике. В нашем случае это ок. Когда же количество тестов выросло до 500+, время прогона увеличилось до 30-35 минут. Мы поняли, что это достаточно долго для того, чтобы получить фидбэк о состоянии приложения. 

Мы рассматривали решения по переезду в облако для более быстрого запуска тестов, но цена поднятия MacOS-инстансов подталкивала поискать альтернативы. В итоге мы пришли к Emcee-раннеру от Авито: настроили ферму из 5 машин, на которых запускаем по 5 симуляторов. В итоге время прогонов тестов уменьшилось до 10-12 минут». 

Антон из Bolt

«Когда мы начали активно внедрять UI-тесты, чтобы ускорить регрессионное тестирование, то столкнулись с тем, что они выполняются довольно долго. В какой-то момент прогон тестов стал занимать полтора часа! Emcee позволил распараллелить тесты на несколько Mac mini и кратно сократить длительность прогона».

Евгений из ivi

«Проект iOS-автотестов стартовал в условиях, когда приложение уже разрослось и регрессия была узким горлышком релизов. Выпускали приложение не чаще, чем раз в месяц, и тонули в волнах регресса.

Для запуска тестов хотелось построить надёжную in-house инфраструктуру на основе коробочного и желательно open source решения. Мы нашли только один такой инструмент — Emcee. С внедрением пришлось немного повозиться, но его один раз настраиваешь, а дальше всё работает как часы. Только бери, да подключай новые ноды и замеряй ускорение прогона тестов. 

Сейчас у нас порядка 800 e2e iOS-тестов, которые пробегают за 2-3 часа. Наш релизный цикл сократился с 4-5 недель до 2, а тестировщикам стало сильно проще выделять время на дополнительные активности в виде улучшения процессов и развития тестовой документации».

Андрей из Space307

Мы готовы вас поддержать

Мы готовы уделить время и поддержать вас с внедрением, настроить вам прогон тестов и получение результатов, дать советы по организации тестовой фермы. 

Стучитесь к нам на специальном лендинге или в телеграме. 

Источник: https://habr.com/ru/company/avito/blog/650223/


Интересные статьи

Интересные статьи

Несколько лет назад Россия присоединилась к Парижскому соглашению по изменению климата. И хотя цель документа благая, изложенная там методика расчета эмиссии и поглощения парниковых газов на бумаге пр...
Российскому рынку остро не хватает IT-специалистов разного профиля, от дата-сайентистов до фронтендеров и разработчиков мобильных приложений. В 2020 на «Уроке цифры» Дмитрий Чернышенко заметил, что се...
Итоги прошедшей недели на Хабре. В этом дайджесте — самые важные, интересные и громкие события, о которых мы говорили с 22 по 29 ноября. В Google разработали «объяснимый» ИИ, Stadia все никак...
В 2012 году Нобелевскую премия по экономике выдали Ллойду Шепли и Элвину Роту. «За теорию стабильного распределения и практики устройства рынков». Алексей Савватеев в 2012 году попытался просто и...
Скрытый под слоем кода, томится язык, жаждущий быть выученным. На момент написания этой статьи запрос «программирование какой язык изучать первым» выдаёт 517 миллионов поисковых результатов. К...