aws-cli Device Farm:使用CLI管理移动应用测试

aws-cli Device Farm:使用CLI管理移动应用测试

【免费下载链接】aws-cli Universal Command Line Interface for Amazon Web Services 【免费下载链接】aws-cli 项目地址: https://gitcode.com/GitHub_Trending/aw/aws-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. 成本控制策略

mermaid

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等工具无缝集成

使用本文提供的命令和最佳实践,您可以构建高效、可靠的移动应用测试流水线,确保应用质量的同时最大化开发效率。

【免费下载链接】aws-cli Universal Command Line Interface for Amazon Web Services 【免费下载链接】aws-cli 项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值