aws-cli Device Farm:使用CLI管理移动应用测试
概述
AWS Device Farm是一项移动应用测试服务,允许开发者在真实的物理设备上测试Android和iOS应用程序。通过AWS CLI,您可以自动化整个移动应用测试流程,从项目创建到测试执行和结果分析。本文将详细介绍如何使用aws-cli管理Device Farm,实现高效的移动应用测试自动化。
核心概念
在开始使用Device Farm之前,需要了解几个核心概念:
| 概念 | 描述 | 示例ARN格式 |
|---|---|---|
| Project(项目) | 测试项目的容器 | arn:aws:devicefarm:region:account:project:project-id |
| Device Pool(设备池) | 一组用于测试的设备 | arn:aws:devicefarm:region:account:devicepool:project-id/pool-id |
| Upload(上传) | 应用文件或测试包的存储 | arn:aws:devicefarm:region:account:upload:project-id/upload-id |
| Run(运行) | 一次测试执行实例 | arn:aws:devicefarm:region:account:run:project-id/run-id |
环境准备
安装和配置AWS CLI
# 安装AWS CLI
pip install awscli
# 配置AWS凭证
aws configure
AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_KEY
Default region name [None]: us-west-2
Default output format [None]: json
验证Device Farm服务访问
# 检查Device Farm服务状态
aws devicefarm list-projects --region us-west-2
完整测试工作流
1. 创建测试项目
# 创建新项目
aws devicefarm create-project \
--name "MyMobileApp-Test" \
--region us-west-2
# 输出示例
{
"project": {
"name": "MyMobileApp-Test",
"arn": "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456",
"created": 1672531200.000
}
}
2. 配置设备池
创建设备选择规则文件 device-rules.json:
[
{
"attribute": "PLATFORM",
"operator": "EQUALS",
"value": "\"ANDROID\""
},
{
"attribute": "OS_VERSION",
"operator": "GREATER_THAN_OR_EQUALS",
"value": "\"10.0\""
},
{
"attribute": "MANUFACTURER",
"operator": "IN",
"value": "[\"Samsung\", \"Google\"]"
}
]
创建设备池:
aws devicefarm create-device-pool \
--name "Android-High-End" \
--rules file://device-rules.json \
--project-arn "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456" \
--description "High-end Android devices for performance testing"
3. 上传应用和测试包
# 上传Android应用
aws devicefarm create-upload \
--project-arn "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456" \
--name "myapp-release.apk" \
--type ANDROID_APP
# 上传测试脚本(如Appium测试)
aws devicefarm create-upload \
--project-arn "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456" \
--name "appium-tests.zip" \
--type APPIUM_JAVA_TESTNG_TEST
4. 执行测试
# 安排测试运行
aws devicefarm schedule-run \
--project-arn "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456" \
--app-arn "arn:aws:devicefarm:us-west-2:123456789012:upload:abc123def456/upload123" \
--device-pool-arn "arn:aws:devicefarm:us-west-2:123456789012:devicepool:abc123def456/pool123" \
--name "Nightly-Regression-Test" \
--test type=APPIUM_JAVA_TESTNG,testPackageArn="arn:aws:devicefarm:us-west-2:123456789012:upload:abc123def456/test123"
5. 监控测试状态
# 获取测试运行状态
aws devicefarm get-run \
--arn "arn:aws:devicefarm:us-west-2:123456789012:run:abc123def456/run123"
# 列出所有测试运行
aws devicefarm list-runs \
--arn "arn:aws:devicefarm:us-west-2:123456789012:project:abc123def456"
高级功能配置
测试配置选项
# 自定义测试超时设置
aws devicefarm schedule-run \
--project-arn "your-project-arn" \
--app-arn "your-app-arn" \
--device-pool-arn "your-device-pool-arn" \
--test '{
"type": "APPIUM_JAVA_TESTNG",
"testPackageArn": "your-test-package-arn",
"filter": "TestSuite1",
"parameters": {
"appium_version": "1.22.0",
"test_spec_arn": "your-test-spec-arn"
}
}' \
--execution-configuration '{
"jobTimeoutMinutes": 120,
"accountsCleanup": true,
"appPackagesCleanup": true,
"videoCapture": true,
"skipAppResign": false
}'
环境变量和测试参数
创建测试规格文件 test-spec.json:
{
"name": "MyTestSpecification",
"testPackageArn": "your-test-package-arn",
"environmentVariables": {
"ENV": "staging",
"API_BASE_URL": "https://api.staging.example.com",
"TEST_USER": "testuser@example.com"
},
"testParameters": {
"browserName": "Chrome",
"platformVersion": "12.0",
"deviceName": "iPhone.*"
}
}
结果分析和报告
获取测试结果
# 获取测试运行结果
aws devicefarm get-run \
--arn "arn:aws:devicefarm:us-west-2:123456789012:run:abc123def456/run123"
# 下载测试日志和报告
aws devicefarm list-artifacts \
--arn "arn:aws:devicefarm:us-west-2:123456789012:run:abc123def456/run123" \
--type LOG
# 获取特定类型的产物
aws devicefarm list-artifacts \
--arn "your-run-arn" \
--type SCREENSHOT
# 下载视频记录
aws devicefarm get-url \
--arn "arn:aws:devicefarm:us-west-2:123456789012:artifact:abc123def456/artifact123"
自动化结果处理脚本
#!/bin/bash
# 监控测试完成状态
while true; do
STATUS=$(aws devicefarm get-run --arn "$RUN_ARN" --query "run.status" --output text)
case $STATUS in
"COMPLETED")
echo "测试完成"
# 下载结果和分析
aws devicefarm list-artifacts --arn "$RUN_ARN" --type LOG --output json > results.json
break
;;
"ERRORED"|"STOPPED")
echo "测试失败或停止"
exit 1
;;
*)
echo "测试状态: $STATUS,等待中..."
sleep 30
;;
esac
done
最佳实践和优化策略
1. 资源管理优化
# 定期清理旧项目
aws devicefarm list-projects --query "projects[?created<$(date -d '30 days ago' +%s)].arn" --output text | \
xargs -I {} aws devicefarm delete-project --arn {}
# 批量管理设备池
aws devicefarm list-device-pools --arn "your-project-arn" --query "devicePools[].name" --output text
2. 成本控制策略
3. 错误处理和重试机制
#!/bin/bash
MAX_RETRIES=3
RETRY_COUNT=0
schedule_test() {
local output=$(aws devicefarm schedule-run "$@" 2>&1)
local status=$?
if [ $status -eq 0 ]; then
echo "$output"
return 0
elif [[ "$output" == *"ThrottlingException"* ]] && [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
RETRY_COUNT=$((RETRY_COUNT+1))
echo "遇到限流,等待后重试 (尝试 $RETRY_COUNT/$MAX_RETRIES)"
sleep $((2 ** RETRY_COUNT))
schedule_test "$@"
else
echo "测试安排失败: $output"
return 1
fi
}
# 使用封装函数
schedule_test --project-arn "$PROJECT_ARN" --app-arn "$APP_ARN" --device-pool-arn "$POOL_ARN"
常见问题排查
1. 权限问题
# 检查IAM权限
aws iam simulate-principal-policy \
--policy-source-arn "arn:aws:iam::123456789012:user/your-user" \
--action-names "devicefarm:CreateProject" "devicefarm:ScheduleRun"
2. 网络连接问题
# 测试网络连通性
aws devicefarm list-projects --region us-west-2 --debug 2>&1 | grep "HTTP"
3. 文件上传问题
# 检查文件格式和大小
ls -lh myapp.apk
file myapp.apk
# 验证上传状态
aws devicefarm get-upload --arn "your-upload-arn"
总结
通过AWS CLI管理Device Farm,您可以实现:
- 自动化测试流程:从项目创建到结果分析的完整自动化
- 灵活的设备选择:基于多种条件筛选测试设备
- 详细的测试报告:获取日志、截图、视频等完整测试产物
- 成本优化:通过合理的设备选择和超时设置控制测试成本
- 集成CI/CD:与Jenkins、GitHub Actions等工具无缝集成
使用本文提供的命令和最佳实践,您可以构建高效、可靠的移动应用测试流水线,确保应用质量的同时最大化开发效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



