Настройка тестирования на реальных устройствах через BrowserStack
При запуске мобильного приложения клиенты жалуются на краши и зависания на конкретных моделях — на эмуляторах всё зелёно. Знакомая ситуация? Эмуляторы не эмулируют реальные сценарии: фрагментацию экранов, версии API, глюки сенсора или поведение чипов. По статистике, до 40% critical-багов в продакшене связаны с платформенно-зависимыми ошибками, которые не воспроизводятся на эмуляторах. BrowserStack App Automate решает эту проблему, предоставляя облачную ферму реальных устройств с поддержкой Appium, Espresso и XCUITest. Мы настраиваем всю инфраструктуру под ключ и интегрируем её в ваш CI за 2–3 дня. Средняя стоимость подписки для небольшой команды — от $200/мес, что существенно дешевле покупки и обслуживания собственного парка устройств.
Как BrowserStack отличается от Firebase Test Lab?
| Характеристика | BrowserStack | Firebase Test Lab |
|---|---|---|
| Интерактивный режим | App Live — live-сессии | Только автоматизация |
| Параллельные сессии | От 5 (зависит от тарифа) | Фиксированные шарды |
| Локальный бэкенд | BrowserStack Local | SOCKS-прокси (сложнее) |
| Поддерживаемые фреймворки | Appium, Espresso, XCUITest | Appium, XCTest, Gameloop |
| Устройства в реальном времени | 3000+ моделей | ~200 моделей |
Например, в одном из наших проектов — финтех-приложение с 2 млн пользователей — после перехода с эмуляторов на BrowserStack выявили 30% новых багов, связанных с разными версиями WebView и камерами. Опыт нашей команды (5+ лет, 20+ проектов) позволяет избежать типичных ошибок: неправильный выбор устройств, игнорирование code signing для iOS или неверная настройка Push Notifications (APNs/FCM).
Какие устройства и ОС доступны?
BrowserStack покрывает практически все актуальные модели: от Samsung Galaxy S24, Google Pixel 8 до iPhone 15 Pro, iPad Pro M4. Поддерживаются версии iOS от 15 до 17 и Android от 11 до 14. Вы можете выбирать как новейшие флагманы, так и старые устройства для проверки обратной совместимости. Это особенно важно для приложений с долгой поддержкой legacy-устройств.
Подключение существующих Appium-тестов
Если Appium-тесты уже написаны, перевод на BrowserStack — это изменение capabilities и URL сервера. Ниже пример конфигурации для TypeScript:
// wdio.conf.ts (пример полной конфигурации)
const capabilities = [
{
platformName: 'Android',
'appium:deviceName': 'Samsung Galaxy S24',
'appium:platformVersion': '14.0',
'bstack:options': {
userName: process.env.BROWSERSTACK_USERNAME,
accessKey: process.env.BROWSERSTACK_ACCESS_KEY,
appiumVersion: '2.6.0',
projectName: 'MyApp E2E Tests',
buildName: `Build ${process.env.BUILD_NUMBER}`,
sessionName: 'Login Flow',
local: false, // для локального тестирования установить true
},
'appium:app': process.env.BROWSERSTACK_APP_ID || 'bs://app_hash_from_upload',
},
];
export const config = {
maxInstances: 5,
capabilities,
services: [['browserstack', {}]],
};
Загрузка APK перед тестами выполняется через REST API или browserstack-sdk. Хэш приложения живёт 30 дней, повторная загрузка не нужна, если билд не менялся.
Как интегрировать нативные тесты (Espresso/XCUITest)?
BrowserStack поддерживает нативный запуск без Appium-сервера — напрямую через Espresso (Android) и XCUITest (iOS). Это быстрее и стабильнее. Для Espresso используем CLI:
browserstack-sdk ./gradlew connectedAndroidTest
Или через REST API с указанием testSuite (APK с androidTest-кодом). Результаты доступны в консоли BrowserStack и через API.
Параллельное тестирование: как ускорить прогон?
BrowserStack тарифицирует параллельные сессии. На стандартном плане — 5 параллельных устройств, на Team — 25. При правильной конфигурации можно сократить время выполнения с 40 минут до 8. Пример настройки в WebdriverIO:
// wdio.conf.ts (фрагмент)
export const config = {
maxInstances: 5,
capabilities: [
{ 'appium:deviceName': 'Samsung Galaxy S24', 'appium:platformVersion': '14.0' },
{ 'appium:deviceName': 'Google Pixel 8', 'appium:platformVersion': '14.0' },
{ 'appium:deviceName': 'iPhone 15 Pro', platformName: 'iOS', 'appium:platformVersion': '17' },
],
};
Каждый capability — отдельный поток. Тест-файлы распределяются автоматически.
Локальное тестирование: что делать с staging-бэкендом?
Если приложение обращается к локальному бэкенду (например, staging.company.com на 192.168.x.x), BrowserStack не достучится до него напрямую. Решение — BrowserStack Local. Подробная настройка описана в официальной документации BrowserStack Local.
./BrowserStackLocal --key $BROWSERSTACK_ACCESS_KEY --local-identifier my-tunnel
В capabilities добавляем:
{ "bstack:options": { "local": true, "localIdentifier": "my-tunnel" } }
Трафик от устройства на BrowserStack маршрутизируется через зашифрованный туннель на вашу машину. Работает и в CI — запускаем BrowserStackLocal как background-процесс перед тестами.
Интеграция в CI
Пример для GitHub Actions:
- name: Upload app to BrowserStack
id: upload
run: |
RESPONSE=$(curl -s -u "${{ secrets.BS_USER }}:${{ secrets.BS_KEY }}" \
-X POST "https://api-cloud.browserstack.com/app-automate/upload" \
-F "[email protected]")
echo "app_url=$(echo $RESPONSE | jq -r '.app_url')" >> $GITHUB_OUTPUT
- name: Run tests
run: npx wdio run wdio.conf.ts
env:
BROWSERSTACK_APP_ID: ${{ steps.upload.outputs.app_url }}
BROWSERSTACK_USERNAME: ${{ secrets.BS_USER }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BS_KEY }}
Детали настройки CI для нестандартных сценариев
Если ваш проект использует монорепозиторий или требует нескольких билдов, мы добавляем параллельную загрузку и матрицу окружений. Также автоматически генерируем переменные для кастомных метаданных (номер билда, ветка).Что входит в работу?
Мы настраиваем:
- Загрузку билдов и автоматическое обновление
app_urlв CI - Capabilities для целевой матрицы устройств (iOS + Android, включая последние флагманы)
- Параллельный запуск в рамках вашего тарифа
- BrowserStack Local для тестирования против staging-бэкенда
- Интеграцию с Allure или HTML-репортёром
- Документацию по конфигурациям и обучение команды (1 сессия)
После завершения вы получаете готовый пайплайн, который стабильно прогоняет тесты 7/24. Гарантируем, что баги, связанные с платформой, будут выявлены до попадания в продакшен. Оставьте заявку на аудит вашего проекта — оценим задачу за один рабочий день и предложим оптимальные сроки настройки.
Сроки
От 2 до 5 дней в зависимости от сложности интеграции. Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами — получите консультацию и предварительную оценку.







