Firebase Test Lab: автотести без коду на реальних пристроях

1442
9 хв.

У світі Android застосунок часто по-різному поводиться на різних пристроях. Емулятор не вирішує проблему повністю: це все ще не справжній пристрій, а оболонки сторонніх виробників (MIUI, One UI, ColorOS та інші) впливають на поведінку застосунку. Тестових пристроїв на всі випадки життя в офісі не напасешся, а їхати з віддаленої роботи заради перевірки однієї фічі на конкретній моделі телефону не завжди можливо.

В ідеалі хочеться один раз записати тест-кейс – просто пройшовши його на своєму телефоні – і потім запускати його віддалено одразу на кількох пристроях, не торкаючись коду. Саме для цього існує Firebase Test Lab.

Що таке Firebase Test Lab?

Firebase Test Lab – хмарна інфраструктура для тестування мобільних застосунків на реальних і віртуальних пристроях, розміщених у дата-центрі Google. Сервіс дозволяє перевірити, як застосунок поводитиметься в руках реального користувача, не купуючи й не обслуговуючи парк пристроїв самостійно.

Основні можливості

Test Lab закриває різні сценарії тестування – від швидкої автоматичної перевірки без жодного рядка коду до повноцінних regression-тестів і live-налагодження на реальному пристрої. Розберемо кожен режим окремо.

Robo Test

Ви завантажуєте APK/AAB-файл і обираєте пристрій. «Робот» сам досліджує застосунок: натискає на всі доступні елементи інтерфейсу, вводить значення в поля, переходить між екранами – і надсилає детальний звіт про те, що сталося.

Robo Script

Якщо потрібно провести робота через конкретний сценарій – наприклад, авторизацію чи оформлення замовлення – сценарій записується через Android Studio і підключається до Robo Test. Робот спочатку проходить за записаними кроками, а потім продовжує досліджувати застосунок самостійно.

Instrumentation-тести

Якщо в проєкті вже є тести на Espresso чи UI Automator, їх можна запускати в Test Lab на реальному парку пристроїв – це повноцінне автоматизоване тестування з конкретними assert-перевірками, а не випадкове дослідження інтерфейсу.

Game Loop-тести

Окремий тип тестів для ігор: замість стандартного UI сервіс використовує спеціальний «ігровий цикл» застосунку, який емулює проходження рівня без участі людини – корисно для Unity-проєктів.

Підтримка iOS

Test Lab підтримує й iOS-застосунки: Robo Test, Robo Script і XCTest доступні не лише для Android. Robo для iOS поки в статусі beta – поведінка може змінюватися.

Android Device Streaming

Потоковий доступ до реальних пристроїв Google в реальному часі прямо з Android Studio. На відміну від Robo Test і Robo Script, де тест виконується автоматично й асинхронно, тут можна вручну, наживо взаємодіяти з фізичним пристроєм для налагодження – корисно, коли потрібно швидко перевірити баг на конкретній моделі, не чекаючи звіту.

Лайфхак: якщо не знаєте, з чого почати, – запустіть Robo Test без скрипту на найпопулярнішій у вашої аудиторії моделі пристрою. Це займе п'ять хвилин і часто одразу розкриває баги, яких розробник не бачив на своєму девайсі.

Ліміти й тарифи

Важливо: у безкоштовному тарифі ліміт рахується не кількістю тестів на день, а часом виконання тестів. Раніше в мережі часто вказували фіксовані «5 тестів на фізичних і 10 на віртуальних пристроях на день» – зараз актуальна модель інша.

Актуальні умови станом на середину 2026 року:

ТарифФізичні пристроїВіртуальні пристрої
Spark (безкоштовний)Обмежена добова кількість тестових прогонівОбмежена добова кількість тестових прогонів
Blaze (за фактом використання), безкоштовний ліміт на добу30 хвилин тестового часу на день без оплати60 хвилин тестового часу на день без оплати

Ліміти спільні для всіх типів тестів (Robo, instrumentation, Game Loop) і рахуються на рівні проєкту. Максимальна тривалість одного прогону на фізичному пристрої також обмежена (у середньому до 45 хвилин). Google періодично переглядає ці цифри, тому перед плануванням тестування їх варто звіряти в документації.

Офіційне джерело: firebase.google.com/docs/test-lab/usage-quotas-pricing

Що отримаємо на виході?

Тестування може зайняти від кількох хвилин до півгодини – залежно від кількості UI-елементів і довжини флоу (тривалість можна обмежити перед запуском). Після завершення у звіті будуть:

  • скриншоти та відео проходження – куди «робот» натискав, де «ходив»;
  • список помилок з місцем появи, stack trace, файлом і рядком коду – можна одразу заводити баг на розробника;
  • логи (logcat), які можна завантажити окремо.

Наприклад, якщо робот наштовхнувся на краш під час відкриття картки товару, у звіті буде видно точний екран, скриншот у момент краша і стек викликів – зазвичай цього достатньо, щоб розробник відтворив баг без зайвих запитань.

Як записати Robo Script в Android Studio?

Щоб «показати» роботу, як пройти авторизацію, або записати конкретний тест-кейс, використовуємо Android Studio. Якщо раніше не працювали з нею – ось інструкція з встановлення:

developer.android.com/studio/install

У проєкті вже має бути підключений Firebase. Якщо ні – процес детально описаний тут:

firebase.google.com/docs/android/setup

Порядок дій:

  1. Tools → Firebase → Test Lab → «Record Robo Script and Use it to Guide Robo Test» → «Record Robo script».
  2. Обираємо пристрій для запису – застосунок запускається на ньому.
  3. Проходимо потрібний сценарій (наприклад, введення логіна й пароля), натискаємо ОК і зберігаємо файл сценарію у форматі JSON.
  4. Збираємо білд застосунку: Build → Build Bundle(s)/APK(s) → Build APK(s).
  5. У консолі Firebase: Test Lab → Run Test → Robo → завантажуємо APK і файл сценарію, обираємо пристрої та ліміт часу, тиснемо Start.

Зверніть увагу: Robo Script не записує дії за межами застосунку, що тестується – наприклад, вхід через Facebook, Google чи інші зовнішні сервіси авторизації в сценарій не потрапить. Такі переходи потрібно обходити окремо (наприклад, тестовим акаунтом з прямим введенням логіна й пароля в самому застосунку).

Якщо сценарій не потрібен і достатньо, щоб Robo пройшовся застосунком самостійно, – з усього списку вище потрібні лише збірка APK і завантаження в консоль. У цьому разі робот піде туди, куди зможе дістатися сам: може не знайти кастомні елементи інтерфейсу, а анімація іноді «збиває» його зі шляху. Такий прогін зручно використовувати як швидкий smoke-тест, а не як заміну повноцінному сценарію.

Presets: значення для полів і дії з кнопками

У консолі перед запуском тесту можна задати значення для конкретних полів вводу або вказати, які кнопки натискати, а які – ігнорувати, за їхнім id. Без базових знань Android-розробки знайти потрібний id у великому проєкті може бути непросто – простіше скористатися записом Robo Script або попросити розробника підказати id елемента. Нюанс: для кастомних UI-елементів потрібен id не layout-контейнера екрана, а стандартного елемента (EditText тощо), схованого всередині кастомного layout.

Якщо id відомий, на екрані вибору пристрою заходимо в Additional options і вказуємо:

  • Test account credentials – для даних авторизації;
  • Robo directives – для будь-яких інших дій з UI-елементами.

У полі resource name вводимо id елемента, а поруч – значення, тип дії «натиснути» чи «ігнорувати».

Автоматизація: gcloud CLI та CI/CD

Ручний запуск через консоль зручний для разової перевірки, але для регулярного тестування його варто вбудувати в процеси команди. Розберемо два способи це зробити.

Запуск через gcloud CLI

Test Lab підтримує запуск з командного рядка через gcloud CLI. Приклад команди для Robo-тесту зі сценарієм:

gcloud firebase test android run --app=app.apk --robo-script=login-script.json --device model=redfin,version=30

Інтеграція в CI/CD

Ту саму команду можна викликати з пайплайну (GitHub Actions, GitLab CI, Bitrise, Jenkins), щоб Robo Test чи instrumentation-тести запускалися автоматично під час кожного пушу в гілку релізу або перед публікацією збірки. Це допомагає ловити регресії до того, як білд потрапить до QA чи замовника – але варто пам'ятати про денні ліміти безкоштовного тарифу.

Лайфхак: не ганяйте в CI повноцінний Robo Test без обмеження часу – задайте --timeout на 3-5 хвилин. Так ви вкладетеся в безкоштовний ліміт навіть за частих пушів і не чекатимете довгого прогону на кожен коміт.

Підсумки

Описані сценарії – Robo Test, Robo Script, presets, а також gcloud CLI та інтеграція в CI/CD – покривають більшість практичних задач: від швидкої перевірки «нічого не зламалося» до регрес-тестування на різних пристроях без потреби тримати їх у себе в офісі. За актуальними лімітами й деталями завжди варто звірятися з офіційною документацією Google – умови періодично змінюються.

Test Lab закриває автотести, але не замінює ручне QA повністю – повний перелік перевірок для релізу дивіться в нашому чек-листі тестування мобільного застосунку.

А якщо потрібна допомога не лише з тестуванням, а й з самою розробкою Android-застосунку – Brander робить це під ключ.

31 травня 2021
4.3 / 5 (11 голосів)