Мобильные тесты за пару кликов с помощью Maestro?
Итак, автоматизация тестирования мобильных приложений — это тема, которая остается актуальной и востребованной. За последние годы наблюдается тенденция к упрощению разработки и снижению объема написания кода.
Более того, технологии искусственного интеллекта (ИИ) все чаще применяются для создания тестов, что значительно ускоряет процессы. Например, Testim или Applitools Eyeys.
Прежде чем мы перейдем к обсуждению Maestro, давайте рассмотрим основные фреймворки для тестирования мобильных приложений и их особенности.
Кстати, про основы веб-автоматизации я рассказал в этом видео. Если вы новичок в деле автоматизации - думаю вам будет полезно посмотреть этот урок.
Видео-версию сегодняшнего урока по Maestro можно посмотреть здесь.
Популярные фреймворки для мобильного тестирования
Appium
Универсальное решение для тестирования iOS и Android. Основное преимущество — возможность работы без доступа к исходному коду приложения. Интуитивно понятный Selenium-синтаксис, позволяет разработчикам писать тесты на множестве языков программирования: Java, Python, JavaScript, C#, Ruby и других.
Несмотря на популярность, Appium часто критикуют за нестабильность и сложность в настройке, особенно при работе с большими и сложными проектами. Не все так гладко как кажется, но инструмент является очень популярным. Пожалуй, наибольшее количество документации именно под Appium.
XCUITest
Стандартный инструмент для тестирования приложений на iOS, интегрированный в Xcode. Поддерживает только языки Objective-C и Swift, что ограничивает его использование.
Подходит для разработки быстрых и надежных тестов, но работает исключительно с экосистемой Apple.
Jetpack Compose Testing
Новый фреймворк Jetpack Compose позволяет тестировать приложения, которые разработаны с декларативным подходом.
У меня есть видео про автоматизацию с помощью этого инструмента, включая описание работы приложения ToDoSlav, которое мы будем рассматривать далее в статье.
Espresso
Инструмент от Google для тестирования Android-приложений. Отличается простотой использования, высокой стабильностью и встроенной поддержкой Java и Kotlin. Espresso идеально подходит для написания тестов, интегрированных в процессы разработки.
У меня есть видео по тестированию с использованием Espresso, в котором я достаточно информативно рассказываю примеры использования этого фреймворка.
Также можно упомянуть KIF, Robotium и другие инструменты для мобильного тестирования. Однако, на мой взгляд Appium является основным инструментом в индустрии мобильного тестирования.
Maestro: новый "игрок" в мобильном тестировании?
Maestro — это инструмент, который можно назвать "автоматизация тестов без кода". Этот фреймворк фокусируется на удобстве использования и снижении порога входа для начинающих тестировщиков.
Что еще интересно: судя по поддерживаемым платформам, возможно также и веб-тестирование.
Особенности Maestro
- Поддержка iOS и Android: универсальное решение для обеих платформ. В случае с iOS на данный момент есть ограничение, что фреймворк не работает с реальными устройствами - только с эмуляторами.
- Возможность использования Page Object Model. Можно писать простые YAML скрипты, а можно использовать POM и прописать локаторы js в отдельном файле.
- Простота настройки: не требует сложных конфигураций и интеграций. По сути, это даже не столько программирование, а написание простых команд в YAML файле.
- Интуитивно понятный интерфейс: тесты создаются буквально за пару кликов, что особенно удобно для тестировщиков без опыта программирования.
- Гибкость: возможность интеграции с CI/CD процессами.
- Работа с локаторами: Локаторы определяются через атрибуты ID, текст или позиции. Это упрощает их создание и обслуживание по сравнению с Appium, где часто требуется сложная XPath-навигация (что является отдельной "болью"). Также есть "maestro studio" - веб-интерфейс, который позволяет легко найти необходимые локаторы.
- Стабильность: фреймворк минимизирует количество ложных срабатываний ("flaky tests"), обеспечивая более надежные результаты. Однако надо учитывать, что он находится в стадии активной разработки и далеко не весь функционал реализован. Нет необходимости управлять ожиданиями элементов, в отличие от Appium и подобных ему фреймворков.
Как установить Maestro?
Не будем слишком долго фокусироваться на установке, так как есть довольно обширный документ об этом на официальном сайте. Для Windows необходима установка WSL компонента в систему.
Далее Maestro можно ус��ановить на любой системе с помощью команды:
Либо (если у вас установлен пакетный менеджер HomeBrew), то можно использовать команду:
Основные команды для запуска Maestro
Все довольно просто. В основном вы будете использовать следующие команды:
- Запуск теста: maestro test <test_file.yaml>. Позволяет выполнить сценарий тестирования.
- Просмотр логов: maestro cloud. Позволяет запускать тесты в "облаке". Для этого у разработчика есть отдельный сайт.
- Интерактивный режим: maestro studio. Запускает графический интерфейс для создания и редактирования тестов.
- Проверка конфигурации: maestro record. Запись видео-тестов исполнения тестов. Удобно, когда такое средство встроено непосредственно в сам фреймворк
Пример использования Maestro
Мы будем тестировать простое приложение для создания списка задач "ToDoSlav". Его я написал как шаблон для тестирования с использованием различных фреймворков. У меня есть видео-урок по автоматизации этого приложения с использованием Jetpack Compose.
Репозиторий с приложением есть здесь. Можно собрать готовый APK файл с помощью Android Studio, а можно использовать готовый файл здесь.
После того как APK файл скачан или собран вами самостоятельно - можно приступать к созданию и настройке эмулятора, либо использованием вашего физического Android устройства. Видео-инструкцию по тому как это сделать в Android Studio я создал здесь.
Конфигурация теста Maestro
Напишем простой Android тест для нашего приложения ToDoSlav с использованием следующих команд и назовем его main_activity_test.yml:
Разберем каждую команду:
1) appId: У каждого установленного приложения на Android есть определенный идентификатор. В нашем случае это "com.deemoun.todoapp".
2) Команда "launchApp". Запускаем приложение по этому идентификатору. Если указан неверно - приложение не запустится.
3) Указываем комментарий, что это первый тест "Test 01" и пишем шаги.
4) Первый шаг: Установить фокус на элементе "EnterTaskField" - это поле ввода в нашей программе. Используется команда "tapOn"
5) Далее пишем, что мы производим ввод в поле с названием "EnterTaskField" с содержанием "TestTask1". Используется команда "inputText" с параметрами "text" и "id" нужного элемента.
6) Далее мы нажимаем кнопку "Add" с помощью уже известной нам команды "tapOn".
7) С помощью команды "assertVisible" проверяем, что такой элемент имеется на экране.
8) Удаляем добавленное задание с помощью команды "tapOn" по названию элемента: "Delete".
Запуск тестов Maestro
Запуск тестов осуществляем с помощью команды "maestro test main_activity_test.yml" в терминале вашей операционной системы.
Как мы видим на скриншоте выше - все тесты здесь прошли успешно, но так бывает не всегда. В случае когда тест "провалился" - формируется скриншот с окном эмулятора в момент проваленного теста.
Maestro Studio: поиск элементов и локаторов
Возникает вопрос. Каким же образом находить элементы на экране и взаимодействовать с ними? Так вот, Maestro Studio — это инструмент с графическим интерфейсом, который упрощает создание тестов.
Можно записать готовый сценарий и потом просто вставить его в YAML файл, а можно найти локаторы и использовать их в нужных случаях.
Утилита запускается с помощью команды "maestro studio" и открывается в вашем веб-браузере. Важно, чтобы был запущен эмулятор, так как утилита подключается к эмулятору.
Основные возможности Maestro Studio
- Запись действий пользователя для автоматической генерации сценария.
- Поиск локаторов для элементов
- Визуальная отладка тестов в реальном времени.
- Быстрая модификация уже созданных тестов.
Какие у Maestro основные команды для YAML тестов?
Почему Appium может быть лучше?
Appium это инструмент с большой историей разработки и применения. В больших компания уже выработалась культура вокруг Selenium-подобного синтаксиса и это не так быстро изменить.
Несмотря на проблемы в Appium (например, самая очевидная - управление ожиданиями элементов) - Appium активно развивающийся инструмент, который себя уже зарекомендовал на рынке.
Но это не значит, что его позиции нельзя потеснить. Более того, это уже происходит.
Выводы
Maestro — это интересное решение для тех, кто ищет простоту и доступность в автоматизации тестирования мобильных приложений.
Оно снижает порог входа для начинающих тестировщиков, упрощает работу с локаторами и обеспечивает стабильное выполнение тестов.
Я не вижу ничего плохого в снижении порога входа в автоматизацию тестирования. Тестирование не для избранных, а ИИ позволяет быстро поправлять тесты, в том числе и для этого фреймворка.
Однако, несмотря на все преимущества, есть и места, где еще стоит поработать создателям этого фреймворка, а именно:
- Расширение поддержки сложных сценариев: добавление возможностей для тестирования более специфических пользовательских взаимодействий.
- Улучшение документации: детальное описание всех функций Maestro.
- Интеграции: больше готовых решений для CI/CD систем и популярных IDE.
Я бы не рекомендовал это решение для тех, кто использует уже настроенный фреймворк автоматизации и готовые, написанные тесты.
Все таки, это новое решение и имеет вышеперечисленные недостатки. C другой стороны, если приложение простое и имеет всего 2-3 страницы, то имеет смысл рассмотреть Maestro (можно в течение пары часов написать необходимые тесты).
В дальнейшем развитие Maestro покажет сможет ли этот фреймворк пройти проверку временем. А чтобы поспевать за событиями в мире тестирования - подписывайтесь на мой ламповый Телеграм-канал о QA.