Настройка тестирования на реальных устройствах через AWS Device Farm
AWS Device Farm — облачная ферма реальных мобильных устройств от Amazon. Если инфраструктура проекта уже на AWS (CodePipeline, CodeBuild, S3, IAM), Device Farm встраивается органично: те же IAM-роли, тот же AWS CLI, та же политика доступа. Отдельный логин в стороннюю систему не нужен.
Две модели работы
Автоматизированное тестирование — запуск Appium, Espresso, XCUITest, Calabash тестов на парке устройств. Загружаете APK/IPA и тест-пакет, выбираете устройства, запускаете.
Удалённый доступ (Remote Access) — интерактивная сессия с реальным устройством в браузере. Полезно для ручного воспроизведения бага, проверки UI на конкретной модели или отладки автоматических тестов.
Настройка Appium-тестов для Device Farm
Device Farm требует упаковки Appium-тестов в ZIP с конкретной структурой. Для WebdriverIO (Node.js):
tests.zip/
├── package.json
├── package-lock.json
├── node_modules/ # все зависимости включены
└── test/
└── specs/
└── login.test.js
Все node_modules должны быть внутри архива — Device Farm не запускает npm install. Конфиг WebdriverIO для Device Farm:
// wdio.conf.devicefarm.js
exports.config = {
runner: 'local',
specs: ['./test/specs/**/*.js'],
// capabilities берутся из Device Farm окружения через переменные среды
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
Нативный Espresso без Appium работает быстрее. Загрузка через AWS CLI:
# Создание проекта (один раз)
PROJECT_ARN=$(aws devicefarm create-project --name "MyApp" --query 'project.arn' --output text)
# Загрузка APK
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"
# Загрузка тест-APK
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 $(date)" \
--test type=INSTRUMENTATION,testPackageArn=$TEST_ARN,filter="com.example.LoginTest"
Конфигурация пула устройств
Пул устройств — это набор правил фильтрации:
aws devicefarm create-device-pool \
--project-arn $PROJECT_ARN \
--name "Android Top Devices" \
--rules '[
{"attribute": "PLATFORM", "operator": "EQUALS", "value": "ANDROID"},
{"attribute": "OS_VERSION", "operator": "GREATER_THAN_OR_EQUALS", "value": "13"},
{"attribute": "MANUFACTURER", "operator": "IN", "value": "[\"Samsung\",\"Google\"]"},
{"attribute": "AVAILABILITY", "operator": "EQUALS", "value": "HIGHLY_AVAILABLE"}
]' \
--max-devices 5
AVAILABILITY: HIGHLY_AVAILABLE — Device Farm выбирает только те устройства, которые доступны прямо сейчас. Без этого прогон может встать в очередь.
Интеграция с AWS CodePipeline
В AWS CodeBuild-спецификации:
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:* на конкретный проект или *. Минимальный набор: CreateUpload, ScheduleRun, GetRun, ListArtifacts.
Анализ результатов
После завершения прогона артефакты доступны через API:
aws devicefarm list-artifacts \
--arn $JOB_ARN \
--type FILE \
--query 'artifacts[*].{name:name,url:url}' \
--output table
Типичные артефакты: Logcat, Screenshots, Video, Test spec output. Скачиваем в S3 или просматриваем в консоли Device Farm.
Сроки
2–3 дня — настройка AWS Device Farm, создание пула устройств, конфигурация загрузки билдов, интеграция в CodePipeline или GitHub Actions, первый прогон и разбор результатов. Стоимость рассчитывается индивидуально.







