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 голосов)