Розробка E2E-тестів для мобільного додатка (Maestro)
Ми використовуємо Maestro, тому що це найшвидший спосіб покрити додаток E2E-тестами без танців з сервером. За 5 років ми автоматизували більше 50 мобільних проектів — від банківських додатків до маркетплейсів. Нещодавно для фінтех-стартапу з 30 екранами написали 15 YAML-флоу за 4 дні. Регрес скоротився з двох днів до чотирьох годин, що значно зменшує витрати на обслуговування тестів. Maestro — black-box інструмент, він спілкується з пристроєм через Accessibility API і не потребує модифікації коду. Це ідеально для регресу ключових користувацьких шляхів: реєстрація, каталог, оформлення замовлення. Середній проект скорочує час регресії на 70%, а вартість підтримки тестів — на 40% порівняно з Appium. Гарантуємо: кожен тест проходить рев'ю і запускається на реальних пристроях.
Як Maestro спрощує життя мобільному розробнику?
Головне — нульова конфігурація. Встановив через curl, написав YAML, запустив maestro test. Не потрібно піднімати Appium-сервер, вбудовувати агент або розбиратися з XCUITest. Maestro сам знаходить елементи за текстом, accessibilityLabel або id. Для типових додатків це покриває 80–90% сценаріїв.
Як написати тест на Maestro: покрокова інструкція
- Створіть YAML-файл у папці
flows/. - Вкажіть
appIdвашого додатка (bundle ID для iOS, package name для Android). - Напишіть послідовність дій:
launchApp,tapOn,inputText,assertVisible. - Використовуйте змінні та
runFlowдля перевикористання (див. приклад нижче). - Запустіть тест командою
maestro test flows/.
YAML-сценарії: просто, але є нюанси
Мінімальний флоу авторизації:
appId: com.example.myapp --- - launchApp: clearState: true - tapOn: "Email" - inputText: "[email protected]" - tapOn: "Пароль" - inputText: "password123" - tapOn: "Увійти" - assertVisible: "Головна" tapOn шукає елемент за текстом, accessibilityLabel, testID або id. Якщо на екрані два елементи з однаковим текстом — Maestro натисне на перший. У таких випадках використовуємо tapOn з уточненням: index або id.
- tapOn: text: "Додати" index: 1 - tapOn: id: "add_to_cart_button" id на Android — resource-id, на iOS — accessibilityIdentifier. Maestro визначає платформу автоматично.
Змінні та підфлоу
Без змінних та runFlow великі тест-сьюти перетворюються на копіпасту. Створюємо перевикористовувані блоки:
# flows/login.yaml appId: com.example.myapp --- - tapOn: "Email" - inputText: ${EMAIL} - tapOn: "Пароль" - inputText: ${PASSWORD} - tapOn: "Увійти" # flows/checkout_test.yaml appId: com.example.myapp env: EMAIL: [email protected] PASSWORD: password123 --- - runFlow: flows/login.yaml - tapOn: "Каталог" - tapOn: "Купити" - assertVisible: "Оформлення замовлення" Змінні перевизначаються при запуску: maestro test --env [email protected].
Запуск: локально та в CI
Локальний запуск — головна перевага Maestro. Встановлення та запуск:
curl -Ls "https://get.maestro.mobile.dev" | bash maestro test flows/ maestro studio maestro studio — браузерний UI для інтерактивного вибору елементів.
Maestro Cloud
Для CI без власних пристроїв використовуємо Maestro Cloud. У GitHub Actions:
- name: Run Maestro tests on Maestro Cloud uses: mobile-dev-inc/action-maestro-cloud@v1 with: api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} app-file: app/build/outputs/apk/debug/app-debug.apk flows-file: flows/ Для власного CI — локальний емулятор + maestro test.
Чому Maestro, а не Appium чи Detox?
Ми часто чуємо це питання. Порівняємо в таблицях:
| Критерій | Maestro | Appium | Detox |
|---|---|---|---|
| Конфігурація | Немає | Потрібен сервер | Вбудовування агента |
| Мова тестів | YAML | Java/Python/JS | JS |
| Хмарні пристрої | Maestro Cloud | AWS Device Farm | Firebase |
| Кастомні жести | Немає | Так | Так |
| Доступ до JS | Немає | Немає | Так |
Для стандартних CRUD-додатків Maestro виграє за швидкістю написання та підтримки.
| Сценарій | Строк (дні) | Складність |
|---|---|---|
| 5–7 флоу (реєстрація, каталог, замовлення) | 3 | Низька |
| Складні багатоекранні сценарії | 5 | Середня |
| Повний регрес (20+ флоу) | 10 | Висока |
Обмеження, які треба знати
Maestro не вміє в кастомні жести: pinch, rotate, multi-touch. Для додатків з картами або галереєю, де потрібен зум — Appium або Detox. Немає прямого доступу до JavaScript-контексту (на відміну від Detox). Assertions обмежені видимістю (assertVisible, assertNotVisible). Перевірити точне значення атрибута або координату елемента — не можна.
Незважаючи на це, для стандартних CRUD-додатків, маркетплейсів, сервісних додатків Maestro покриває 80–90% потрібних E2E-сценаріїв з мінімальними витратами на підтримку.
Типові помилки новачків
- Використання тексту, що змінюється (дата, час). Краще використовувати testID.
- Забули очистити стан між тестами — використовуйте
clearState: true. - Неправильний appId — перевірте bundle ID або package name.
- Залежність від порядку екранів — використовуйте
runFlowз авторизацією.
Що входить у роботу під ключ
- Написання YAML-флоу для ключових користувацьких сценаріїв
- Налаштування змінних та перевикористовуваних підфлоу
- Інтеграція з CI (GitHub Actions / GitLab CI)
- Налаштування запуску через Maestro Cloud або локальний емулятор
- Документація з додавання нових тестів
Строки та вартість
3–5 днів залежно від кількості сценаріїв. 5–7 флоу для типового CRUD-додатка — 3 дні. Складні багатоекранні сценарії зі змінними та вкладеними флоу — 5 днів. Вартість розраховується індивідуально. Оцінимо ваш проект за 1 день. Ми гарантуємо якість: кожен тест проходить рев'ю і запускається на реальних пристроях.
Замовте розробку E2E-тестів — напишіть нам, ми відповімо протягом 2 годин. Отримайте консультацію з автоматизації регресу для вашого проекту.







