Настройка тестирования на реальных устройствах через BrowserStack
BrowserStack App Automate — облачная ферма реальных устройств с поддержкой Appium, Espresso и XCUITest. От Firebase Test Lab отличается тем, что устройства доступны в интерактивном режиме (App Live), а автоматизированные тесты запускаются через стандартный WebDriver-протокол — то есть ваш существующий Appium-код подключается к BrowserStack с минимальными изменениями в capabilities.
Подключение существующих Appium-тестов
Если Appium-тесты уже написаны, перевод на BrowserStack — это изменение capabilities и URL сервера:
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',
},
'appium:app': 'bs://app_hash_from_upload', // хэш загруженного APK
};
const driver = await remote({
protocol: 'https',
hostname: 'hub.browserstack.com',
path: '/wd/hub',
port: 443,
capabilities,
});
Загрузка APK перед тестами:
curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/upload" \
-F "[email protected]"
# Возвращает: {"app_url":"bs://abc123..."}
Хэш bs://abc123 подставляем в capabilities как 'appium:app'. APK хранится 30 дней, повторная загрузка не нужна, если билд не менялся.
Нативная интеграция: Espresso и XCUITest
BrowserStack поддерживает нативный запуск без Appium-сервера — напрямую через Espresso (Android) и XCUITest (iOS). Это быстрее и стабильнее.
Espresso через BrowserStack CLI:
browserstack-sdk ./gradlew connectedAndroidTest
Или через REST API:
curl -u "$USER:$KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" \
-d '{
"app": "bs://app_hash",
"testSuite": "bs://test_suite_hash",
"devices": ["Samsung Galaxy S24-14.0", "Google Pixel 8-14.0"],
"class": ["com.example.LoginTest"],
"networkLogs": true,
"deviceLogs": true
}'
testSuite — это загруженный APK с androidTest-кодом. Результаты доступны в консоли BrowserStack и через API.
Параллельное тестирование
BrowserStack тарифицирует параллельные сессии. На стандартном плане — 5 параллельных устройств, на Team — 25. Настройка 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 на 192.168.x.x или localhost), BrowserStack не достучится до него напрямую. Решение — BrowserStack Local:
./BrowserStackLocal --key $BROWSERSTACK_ACCESS_KEY --local-identifier my-tunnel
В capabilities добавляем:
'bstack:options': {
local: true,
localIdentifier: 'my-tunnel',
}
Трафик от устройства на BrowserStack маршрутизируется через зашифрованный туннель на вашу машину. Работает и в CI — запускаем BrowserStackLocal как background-процесс перед тестами.
Интеграция в CI
- 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 }}
Что настраиваем
- Загрузку билдов и автоматическое обновление
app_urlв CI - Capabilities для целевой матрицы устройств (iOS + Android)
- Параллельный запуск в рамках имеющегося тарифа
- BrowserStack Local для тестирования против staging-бэкенда
- Интеграцию с Allure или HTML-репортером для отчётности
Сроки
2–3 дня — настройка подключения, конфигурация матрицы устройств, интеграция в CI, первый прогон и исправление проблем, связанных с платформой. Стоимость рассчитывается индивидуально.







