Налаштування тестування на реальних пристроях через 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, перший прогон та усунення проблем, пов'язаних з платформою. Вартість розраховується індивідуально.







