Настройка тестирования на реальных устройствах через Firebase Test Lab
Эмулятор врёт. Не злобно, но систематически: GPU-рендеринг другой, Bluetooth недоступен, камера симулированная, поведение памяти отличается от реального устройства. Firebase Test Lab даёт доступ к физическим устройствам — Pixel 8, Samsung Galaxy S24, планшетам, старым Xiaomi с кастомными прошивками. Тест, который прошёл на эмуляторе, может упасть на Samsung One UI из-за кастомного WebView или изменённой системы разрешений.
Что умеет Firebase Test Lab
Два режима тестирования:
Instrumentation Tests — запускает ваши Espresso / XCUITest тесты на выбранных устройствах. Полный контроль над тем, что проверяется.
Robo Test — автоматический краулер. Запускаете APK без единого написанного теста, Robo самостоятельно обходит интерфейс по Accessibility-дереву, нажимает кнопки, заполняет поля случайными данными, ищет крэши. Полезен для быстрой проверки новых сборок перед релизом.
Поддержка платформ: Android (Espresso, UI Automator, Appium) и iOS (XCUITest). Firebase Test Lab для iOS — отдельная история с меньшим парком устройств, но реальные iPhone и iPad всё равно ценнее симулятора.
Настройка: от загрузки билда до результатов
Android
Сборка APK и тест-APK:
./gradlew assembleDebug assembleAndroidTest
Загрузка и запуск через gcloud:
gcloud firebase test android run \
--type instrumentation \
--app app/build/outputs/apk/debug/app-debug.apk \
--test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk \
--device model=Pixel8,version=34,locale=ru,orientation=portrait \
--device model=a54xnsxx,version=13,locale=ru,orientation=portrait \
--results-bucket gs://my-project-test-results \
--results-dir "run_$(date +%Y%m%d_%H%M%S)"
model=a54xnsxx — это Samsung Galaxy A54. Список доступных моделей: gcloud firebase test android models list.
Матрица устройств
Выбор матрицы — отдельная аналитическая задача. Нет смысла гонять тесты на 50 устройствах. Принцип:
| Критерий | Что включаем |
|---|---|
| Топ-5 устройств из аналитики | По данным Firebase Analytics / Crashlytics |
| Минимальная поддерживаемая версия ОС | minSdkVersion / deployment target |
| Текущая версия ОС | Android 14 / iOS 17 |
| Samsung (One UI) | Отдельно — из-за кастомизаций |
| Планшет | Если поддерживается форм-фактор |
Реалистичная матрица для большинства проектов: 3–5 устройств. Больше — дороже и дольше, но не обязательно информативнее.
iOS
Для iOS нужен .ipa с development-подписью (не distribution). Загрузка:
gcloud firebase test ios run \
--test MyAppTests.zip \
--device model=iphone15pro,version=17.4,locale=ru_RU,orientation=portrait
MyAppTests.zip — архив с .xctestrun файлом и тест-продуктами. Собирается через xcodebuild build-for-testing.
Robo Test с кастомным скриптом
Чистый Robo-краулер иногда застревает на экране логина — не знает учётные данные. Robo Script позволяет задать начальные действия:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "[email protected]",
"elementDescriptors": [{"resourceName": "com.example.app:id/email_input"}]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [{"resourceName": "com.example.app:id/login_button"}]
}
]
После авторизации Robo продолжает обход уже авторизованной части приложения. Это быстрый способ проверить регрессии без написания тестов.
Интеграция в CI
GitHub Actions:
- name: Set up gcloud
uses: google-github-actions/setup-gcloud@v2
with:
service_account_key: ${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
project_id: my-firebase-project
- name: Run tests on Firebase Test Lab
run: |
gcloud firebase test android run \
--app app-debug.apk \
--test app-debug-androidTest.apk \
--device model=Pixel8,version=34 \
--timeout 10m
Service account нужен с ролью Firebase Test Lab Admin. Результаты автоматически сохраняются в Cloud Storage — скриншоты, видео, логкаты, XML-отчёт.
Анализ результатов
В консоли Firebase Test Lab для каждого запуска доступны:
- Видеозапись прохождения теста
- Logcat с фильтром по тегам
- Скриншоты в ключевых точках
- Отчёт о покрытии (если включён
jacoco) - XML-результаты в формате JUnit (для Allure / Jenkins)
Сроки
2–3 дня — настройка Firebase Test Lab, конфигурация матрицы устройств, интеграция в CI, настройка Robo Script для авторизации. Плюс время на первый анализ результатов и устранение устройство-специфичных проблем. Стоимость рассчитывается индивидуально.







