Запускаем автотесты Android на EMCEE | avito.code

ruticker 04.03.2025 15:24:40

Текст распознан YouScriptor с канала AvitoTech

распознано с видео на ютубе сервисом YouScriptor.com, читайте дальше по ссылке Запускаем автотесты Android на EMCEE | avito.code

# Привет! Я Денис Ренцов, Android инженер из команды MC. Вы на канале Авито Тех, и это очередной выпуск Авито Код. Сегодня я хочу рассказать про инструмент под названием MC и о том, как он нам будет помогать в процессе запуска нативных автотестов мобильных приложений. Ранее для параллельного запуска автотестов он поддерживает параллельные запуски нативных тестов как Android, так и iOS приложений. Сегодня мы рассмотрим часть про Android, расскажу, какую проблему MC решает в Android автотестах, как развернуть систему и как инструмент можно попробовать. Если у вас сейчас нет возможности развернуть систему у себя, прежде чем рассказать о том, как устроен MC и как в нём запускать прогоны тестов, давайте поговорим о том, какие у нас, как инженеров, могут возникать проблемы с автотестами. В первую очередь, при большом количестве автотестов встаёт вопрос о том, как и где их запускать. Если запускать их локально, то это может занять очень много времени. Например, у нас в Авито больше 4,000 автотестов запускается на каждый реквест, и количество тестов продолжает расти. Если запустить такое количество тестов на локальной машине, то прогон займёт десятки часов. Если запускать тесты где-то на удалённых машинах, нужно думать о том, как организовать инфраструктуру, как управлять девайсом. Будут ли это реальные девайсы или эмуляторы? Как девайсы будут подниматься и как останавливаться? Если мы определились с тем, как и где запускать тесты, нужно ещё подумать о том, как делать это быстро, надёжно и как эффективно утилизировать наши ресурсы. Например, если мы на каждый запуск тестов выделяем фиксированный пул девайсов, то из-за неравномерного распределения тестов и времени их выполнения часть девайсов может простаивать до конца прогона тестов. Кроме того, вы, скорее всего, столкнётесь с проблемой параллельных запусков тестов и проблемами очередей при большом количестве реквестов, а также с проблемой запуска тестов на разных версиях Android SDK и так далее. Для решения этих проблем мы придумали MC. Причём изначально MC успешно использовался 4 года только для iOS, и теперь мы решили адаптировать систему и для запуска Android тестов. А почему мы сделали в Авито ставку на автотесты, можно будет почитать в нашем Telegram канале и в дополнительных видео на YouTube. Все ссылки вы найдёте в описании. ## Давайте посмотрим на устройства MC и основные принципы работы. Сама система MC состоит из трёх основных компонентов: 1. **Очередь** — распределяет тесты по воркерам и централизованно возвращает результаты клиентам. 2. **Воркеры** — запускают тесты и эмуляторы, а также управляют этими эмуляторами и собирают с них результаты. 3. **Клиенты** — отправляют тесты в очередь и принимают результат от очереди обратно. Клиенты у нас есть двух видов: **графический интерфейс** и **консольная утилита**. Они взаимозаменяемые и в зависимости от того, что удобнее пользователю. Упрощённо схема работы MC выглядит так: у нас есть реквест с тестами, мы отправляем тесты через клиент в очередь. В моменте может быть много реквестов, очередь распределяет тесты по всем доступным на данный момент воркерам, либо ждёт, пока текущие воркеры освободятся. Воркеры начинают прогонять тесты и возвращают результаты обратно в очередь. Здесь важный момент заключается в том, что освободившиеся воркеры сразу получают новую порцию работы, что позволяет эффективно утилизировать ресурсы. После запуска всех тестов результаты, статусы запуска и артефакты возвращаются обратно клиенту. Для демонстрации я создал и подготовил небольшой проект, который включает в себя 11 разнообразных тестов. Также я добавил инструмент AR, чтобы по окончании тестов можно было посмотреть на отчёт. Давайте теперь посмотрим на настройку плагина. Настройка включает в себя указание адреса очереди MC, настройки для артефактов, а также дополнительные параметры, о которых можно будет прочитать в нашей публичной документации. Теперь у нас всё готово для запуска тестов. Давайте проверим, что главная задача создалась, находим нашу задачу и запускаем её. Наш прогон запущен, теперь нам необходимо подождать, пока наши автотесты выполнятся на удалённой инфраструктуре. Как мы видим, наш прогон закончился, артефакты прогона были загружены, и в конце нашего прогона мы видим, что три теста упали, как мы и ожидали. Давайте теперь заглянем в артефакты прогона. Это могут быть логи по каждому тесту, видеозаписи по каждому тесту. Причём по каждому тесту я указал стратегию записывать запись экрана только для упавших тестов, а также это могут быть файлы для отчёта Allure. Давайте теперь посмотрим, что нам создал Allure для нашего отчёта. Итак, у нас есть Allure отчёт, в котором 11 наших тестов, и как мы видим, три из них упали. Также хочется отметить, что все файлы Allure, которые создаёт в процессе своей работы, также есть в этом отчёте. Например, здесь можно видеть скриншот нашего экрана. Таким образом, мы успешно запустили тесты в системе MC на удалённой инфраструктуре и проверили, что тесты успешно запустились и по ним вернулись артефакты запуска. Теперь я покажу, как в базовом варианте быстро развернуть MC на своей инфраструктуре. Чтобы развернуть MC, нам потребуется Linux сервер, KVM, Docker и Artifactory. Отмечу, что Artifactory нам нужен для передачи файлов в системе MC. Artifactory можно использовать либо уже существующий в вашей компании, либо можно развернуть Open Source версию рядом с MC. Запускать же MC можно как в Docker, так и использовать Docker Compose или Kubernetes. Основное отличие между способами запуска здесь в том, что если запускать через Kubernetes, то можно более гибко настроить способ взаимодействия с кластерами на разных серверах, а также построить более сотни воркеров. Я же покажу простой пример с Docker Compose, в котором мы запустим очередь и 10 воркеров. Для этого нам потребуется два файла. Один из них будет описывать Docker образы, которые развернут нам систему MC. Давайте посмотрим на этот файл. В нём описано несколько образов: это, как я уже ранее говорил, очередь, воркеры и Artifactory. Также нам потребуется второй файл, в котором мы опишем настройки для наших воркеров. В базовой версии будет достаточно всего двух полей. Итак, у нас всё готово для запуска. Давайте запустим нашу систему. Мы видим, как наши контейнеры разворачиваются. Чтобы проверить, что система успешно развернулась, можно посмотреть на логи. Для этого я подготовил специально небольшой скрипт, который нам позволит прочитать последние строки со всех воркеров. Итак, мы видим, что каждый воркер поднял свой сервер. Это значит, что воркеры успешно подключились к очереди. Мы рассмотрели, как можно относительно просто развернуть систему для прогона автотестов, таким образом решив проблему сложности разворачивания подобных систем. Давайте посмотрим, как можно запустить тесты, используя графический интерфейс и уже готовую инфраструктуру в облаке. Для этого у нас есть сервис MCCloud. В нём можно запустить тесты iOS и Android прямо в браузере. Давайте запустим тесты Android. Для этого нам нужно загрузить наши APK файлы с тестами и само приложение. Итак, файлы загружены, мы можем переходить к следующему шагу. В следующем шаге мы можем посмотреть список наших тестов, выбрать какие-то интересующие нас, либо выбрать все сразу. Проходим дальше. Здесь мы можем выбрать версию Android SDK, на которой мы хотим запустить наши тесты, а также указать какие-то переменные окружения, которые будут использоваться в наших тестах. После того как всё выбрано, мы можем запустить наш прогон. Итак, мы видим, что наши тесты запустились и распределились по воркерам. По мере их выполнения тесты будут отображаться в UI с их статусом: успешные или неуспешные. Также хочется отметить, что неуспешные тесты повторно попадают в очередь с той целью, чтобы запуститься на других воркерах. После того как тесты завершились, успешно или неуспешно, мы можем посмотреть какую-то информацию по их запуску, например, почему упал тот или иной тест. Итак, мы видим, что прогон успешно завершился, всего было запущено 11 тестов, и три из них не прошло. Также мы можем посмотреть, сколько времени всего занял прогон и сколько времени занимало исполнение тестов. Также на этом экране мы можем загрузить отчёты в интересующих нас форматах, либо же, если хотим запустить другой набор тестов, повторно запустить этот прогон на этих же файлах. ## Подведём итоги. Сегодня мы рассмотрели инструмент MC для запуска нативных автотестов Android, а также какие он проблемы решает и как быстро можно развернуть инфраструктуру для запуска автотестов на основе MC. В будущем мы планируем добавить больше фичей и продолжим улучшать. Добавлю, что наш продукт можно попробовать в разных вариантах, в том числе бесплатно, в зависимости от ваших потребностей. Например, можно развернуть MC на своей инфраструктуре, либо попробовать Cloud версию, либо использовать интеграцию с GitHub Actions, если вы хотите встроить MC прямо в ваш CI. На этом всё. Спасибо за просмотр! Ставьте лайки, подписывайтесь на канал и до встречи!

Назад

Залогинтесь, что бы оставить свой комментарий

Copyright © StockChart.ru developers team, 2011 - 2023. Сервис предоставляет широкий набор инструментов для анализа отечественного и зарубежных биржевых рынков. Вы должны иметь биржевой аккаунт для работы с сайтом. По вопросам работы сайта пишите support@ru-ticker.com