Регрессионное тестирование мобильного приложения на десятке устройств — головная боль без облачной фермы. Разные производители, версии ОС, разрешения экранов — каждый тест приходится запускать локально или на реальных устройствах в офисе. AWS Device Farm решает эту проблему, используя экосистему AWS: те же IAM-роли, CLI, политики доступа. Наш опыт показывает, что 80% проблем при первом запуске — неправильная упаковка тестов или конфигурация пула устройств. Избежать этих ошибок поможет эта статья. Мы настроили Device Farm для 30+ проектов, и среднее сокращение времени регрессионного тестирования составило 70% — это позволило клиентам отказаться от покупки физических устройств и сосредоточиться на качестве кода.
Как настроить тестирование на AWS Device Farm?
Почему AWS Device Farm, а не BrowserStack или Sauce Labs?
Если ваш проект уже на AWS (CodePipeline, CodeBuild, S3), Device Farm встраивается органично: не нужен отдельный логин, биллинг через AWS, IAM-политики централизованы. Для компаний с требованиями к data residency это плюс — устройства находятся в тех же регионах, что и остальная инфраструктура. Device Farm поддерживает APK/IPA и Instrumentation-тесты (Espresso) без дополнительной прослойки. По сравнению с BrowserStack, Device Farm даёт больше контроля над пулом устройств, хотя интерфейс менее интуитивен.
Что входит в настройку?
| Компонент | Описание |
|---|---|
| Проект и IAM-роли | Создание проекта, минимальные права |
| Пул устройств | Фильтрация по платформе, версии ОС, производителю |
| Упаковка тестов | Примеры для Appium, Espresso, XCUITest |
| Интеграция CI/CD | CodePipeline, GitHub Actions, GitLab CI |
| Отчёты и уведомления | Slack, Telegram, S3 |
| Документация | Инструкции для вашей команды, скрипты |
Типы тестов: сравнение
| Тип | Скорость | Поддержка | Сложность упаковки |
|---|---|---|---|
| Appium | Средняя | Android, iOS | Средняя (зависимости в ZIP) |
| Espresso | Высокая | Android (4.3+) | Низкая (обычный APK) |
| XCUITest | Высокая | iOS (9.0+) | Средняя (xcodebuild) |
Как упаковать Appium-тесты для Device Farm?
Упаковка Appium-тестов — частая причина сбоев. Device Farm требует ZIP с package.json, node_modules и тестами. Структура для WebdriverIO:
tests.zip/
├── package.json
├── package-lock.json
├── node_modules/
└── test/
└── specs/
└── login.test.js
Конфиг WebdriverIO:
// wdio.conf.devicefarm.js
exports.config = {
runner: 'local',
specs: ['./test/specs/**/*.js'],
capabilities: [{
platformName: process.env.DEVICEFARM_DEVICE_PLATFORM_NAME,
'appium:deviceName': process.env.DEVICEFARM_DEVICE_NAME,
'appium:platformVersion': process.env.DEVICEFARM_DEVICE_OS_VERSION,
'appium:app': process.env.DEVICEFARM_APP_PATH,
'appium:automationName': process.env.DEVICEFARM_DEVICE_PLATFORM_NAME === 'iOS' ? 'XCUITest' : 'UiAutomator2',
}],
hostname: 'localhost',
port: 4723,
};
Device Farm сам запускает Appium-сервер, переменные передаются автоматически.
Нативные тесты: Espresso и XCUITest
Espresso работает быстрее Appium, так как выполняется в одном процессе с приложением. Загрузка APK и тест-APK через AWS CLI:
PROJECT_ARN=$(aws devicefarm create-project --name "MyApp" --query 'project.arn' --output text)
APP_UPLOAD=$(aws devicefarm create-upload --project-arn $PROJECT_ARN --name "app-debug.apk" --type ANDROID_APP --query 'upload.{arn:arn,url:url}' --output json)
APP_URL=$(echo $APP_UPLOAD | jq -r '.url')
APP_ARN=$(echo $APP_UPLOAD | jq -r '.arn')
curl -T app/build/outputs/apk/debug/app-debug.apk "$APP_URL"
TEST_UPLOAD=$(aws devicefarm create-upload --project-arn $PROJECT_ARN --name "app-debug-androidTest.apk" --type INSTRUMENTATION_TEST_PACKAGE --query 'upload.{arn:arn,url:url}' --output json)
TEST_ARN=$(echo $TEST_UPLOAD | jq -r '.arn')
curl -T app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk "$(echo $TEST_UPLOAD | jq -r '.url')"
aws devicefarm schedule-run --project-arn $PROJECT_ARN --app-arn $APP_ARN --device-pool-arn $POOL_ARN --name "Espresso Run" --test type=INSTRUMENTATION,testPackageArn=$TEST_ARN,filter="com.example.LoginTest"
Для iOS используйте XCUITest, упаковка через xcodebuild.
Пошаговая инструкция по настройке Device Farm
- Создайте проект Device Farm и настройте IAM-роли с минимальными правами (devicefarm:* на проект).
- Сформируйте пул устройств: выберите платформу, версии ОС, производителей и отфильтруйте по AVAILABILITY: HIGHLY_AVAILABLE, чтобы избежать очередей.
- Загрузите приложение (APK/IPA) и тестовый пакет через AWS CLI или консоль. Убедитесь, что тесты упакованы правильно (ZIP с зависимостями).
- Запустите тестовый прогон, выбрав пул и тип теста (Appium, Espresso, XCUITest).
- Настройте интеграцию с CI/CD (CodePipeline, GitHub Actions) и уведомления (Slack, Telegram).
Интеграция с CI/CD
Добавьте этап в buildspec.yml для CodePipeline:
phases:
build:
commands:
- ./gradlew assembleDebug assembleAndroidTest
- APP_ARN=$(aws devicefarm create-upload --project-arn $DEVICE_FARM_PROJECT_ARN --name "app.apk" --type ANDROID_APP --query 'upload.arn' --output text)
# ... загрузка и запуск
- aws devicefarm get-run --arn $RUN_ARN --query 'run.result'
IAM-роль CodeBuild должна иметь разрешения devicefarm:* на проект.
Почему тесты падают при первом запуске?
Типичные ошибки:
- Неправильная упаковка Appium-тестов — ZIP без node_modules.
- Пул устройств без фильтра
AVAILABILITY: HIGHLY_AVAILABLE— прогон встаёт в очередь на час. - Неверные переменные окружения — Device Farm передаёт
DEVICEFARM_DEVICE_PLATFORM_NAMEи другие. - Отсутствие прав на запись в S3 для артефактов.
Официальная документация AWS рекомендует использовать пулы высокой доступности для минимизации времени ожидания.
Анализ результатов
Артефакты доступны через API:
aws devicefarm list-artifacts --arn $JOB_ARN --type FILE --query 'artifacts[*].{name:name,url:url}' --output table
Типичные артефакты: Logcat, Screenshots, Video, Test spec output. Наши инженеры настраивают автоматическую отправку отчёта в Slack или Telegram.
Кейс: как настройка Device Farm сэкономила 40 часов в месяц
Один из клиентов — финтех-стартап с Android-приложением, тестируемым на 20 устройствах локально. Каждый прогон регрессии занимал 8 часов ручного труда. После настройки Device Farm с интеграцией в GitLab CI время сократилось до 1,5 часов полностью автоматически. Мы настроили пул из 10 параллельных устройств, подключили уведомления в Slack и экспорт отчётов в S3. Затраты на облачную ферму оказались ниже стоимости содержания собственного парка устройств.
Наши инженеры имеют AWS-сертификации и 10+ лет опыта в мобильной разработке. Мы гарантируем, что первый прогон будет успешным в течение 3 дней после начала работ.
Свяжитесь с нами для бесплатной оценки вашего проекта. Закажите настройку AWS Device Farm и получите первый успешный прогон через 3 дня. Все скрипты и документация остаются у вас.
Подробнее о Device Farm читайте в официальной документации AWS.







