用途
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,无冲突项。