SuperAPI AI 工具集

testing-mobile

测试与质量

查看项目

更新于 10-16 08:26

技能介绍

用途

testing-mobile 用于自动化移动应用测试,覆盖 iOS 与 Android 平台的 UI 测试、设备兼容性验证以及截图采集。它把多种主流测试框架与云端真机测试服务整合在一起,帮助开发者在不同设备和平台上验证应用可靠性。

主要能力

  • XCUITest:使用 XCTest 框架为 iOS 编写 UI 测试。
  • Espresso:以精确交互自动化 Android UI 测试。
  • Detox:在 iOS/Android 上执行端到端测试,并处理不稳定的测试(flaky test)。
  • Maestro:通过 YAML 定义测试流程,实现跨平台移动测试。
  • 云服务集成:在 BrowserStack、Sauce Labs 或 Firebase Test Lab 上运行测试,支持在真实设备上并行执行。
  • 截图:采集并对比截图,用于视觉回归测试。
  • 设备农场:通过 API 访问模拟器、仿真器或真实设备。

使用方式

测试脚本可用 Swift、Kotlin 或 JavaScript 编写,配置设备规格后通过 CLI 或 API 运行。本地测试可使用模拟器;需要规模化时上传到云服务。使用前需先准备依赖,例如 iOS 需要 Xcode,Android 需要 Android SDK。典型流程为:初始化测试、执行操作、断言结果、处理清理。

常用命令与 API 示例:

  • XCUITest(iOS):xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14' -only-testing:MyAppTests,可通过环境变量传入密钥,如 $XCUITEST_API_KEY。
  • Espresso(Android):通过 Gradle 执行 ./gradlew connectedAndroidTest --tests com.example.MyTest,可用 --stacktrace 调试。
  • Detox:detox build -c ios.sim.release 后执行 detox test -c ios.sim.release,可在 package.json 中配置脚本。
  • Maestro:maestro test my-flow.yml,YAML 格式包含 appId: com.example.app 与 steps: - launchApp。
  • BrowserStack:通过 API 上传并运行,向 https://api-cloud.browserstack.com/app-automate/espresso/v2 发送 POST 请求,请求头使用 $BROWSERSTACK_ACCESS_KEY。
  • Sauce Labs:使用 sc run --device "iPhone 14" --app myapp.ipa,或调用 API 端点 POST https://api.us-west-1.saucelabs.com/v1/{username}/jobs,认证头为 Authorization: Basic $SAUCE_ACCESS_KEY。
  • Firebase Test Lab:gcloud firebase test android run --app myapp.apk --test mytest.apk --device model=shiba,需要 $GOOGLE_APPLICATION_CREDENTIALS 环境变量。

集成时需添加依赖:XCUITest 需安装 Xcode;Espresso 需在 build.gradle 中引入。云服务认证需设置 $BROWSERSTACK_USERNAME、$BROWSERSTACK_ACCESS_KEY 等环境变量。可使用配置文件,例如 detox.config.js 中配置 { configurations: { 'ios.sim.debug': { device: 'iPhone 14' } } }。在 CI/CD(如 GitHub Actions)中可添加 run: detox test 步骤并处理截图产物;并行运行可在工作流中指定矩阵。

适用场景

适用于构建或维护 iOS/Android 应用时运行 UI 测试、验证交互,或在真实设备上测试。可用于 CI/CD 流水线中的回归测试、发布前验证,以及调试特定设备(如 iPhone 14 或 Pixel 6)上的 UI 问题。

限制与错误处理

  • XCUITest 出现 “No such device” 时,检查 destination 字符串,并用 xcrun simctl boot iPhone 14 确保模拟器已启动。
  • Espresso 因超时失败时,可在代码中添加 .withTimeout(5000)。
  • Detox 测试不稳定时,可使用 await waitFor(element).toBeVisible();。
  • 云服务认证失败(如 BrowserStack 返回 401)时,检查 $BROWSERSTACK_ACCESS_KEY 并重试;解析 API 响应中的错误,检查 HTTP 状态码并记录详情。常见修复方式是更新依赖或配置中的设备档案。

该技能与 testing-general 相关(同属测试集群),依赖 authentication-service(用于 $BROWSERSTACK_ACCESS_KEY 等 API 密钥),与 mobile-development 集成(用于应用构建),通过云测试扩展 device-farm-management,无冲突项。