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







