关于 testing-mobile
testing-mobile 技能指导 iOS 和 Android 应用的 UI 与端到端测试,涵盖多种测试框架、云端设备服务及基于截图的视觉回归检查。
主要功能
- 01使用 XCUITest 编写 iOS 测试
- 02使用 Espresso 自动化 Android 测试
- 03通过 Maestro 执行跨平台流程
- 04使用 Detox 进行端到端测试
- 05使用云端设备服务并捕获截图
适用场景
- 01在 iOS 模拟器验证 UI 交互
- 02在设备上运行 Android 回归测试
- 03通过云端设备服务测试应用构建
- 04比较截图以检查视觉回归
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill testing-mobile安装后在 Claude Code 中输入/testing-mobile确认已加载。
详细介绍
测试移动应用
用途
此技能使用 XCUITest、Espresso、端到端测试框架 Detox、用于测试流程的 Maestro,以及 BrowserStack、Sauce Labs 或 Firebase Test Lab 等云服务,自动化移动应用测试。它侧重于 UI 测试、设备兼容性和屏幕截图采集,确保应用在不同平台上保持可靠。
适用场景
在构建或维护 iOS/Android 应用,需要运行 UI 测试、验证交互或在真实设备上测试时,使用此技能。可在 CI/CD 流水线中用于回归测试、发布前测试,或调试特定设备(如 iPhone 14 或 Pixel 6)上的 UI 问题。
主要功能
- XCUITest:使用 XCTest 框架编写 iOS UI 测试。
- Espresso:通过精准交互自动化 Android UI 测试。
- Detox:在 iOS/Android 上执行端到端测试,并处理不稳定的测试。
- Maestro:通过 YAML 定义测试流程,用于跨平台移动测试。
- 云集成:在 BrowserStack/Sauce Labs/Firebase Test Lab 上的真实设备上并行运行测试。
- 屏幕截图:采集并比较屏幕截图,以进行视觉回归测试。
- 设备集群:通过 API 访问模拟器或真实设备。
使用模式
要完成任务,请按以下方式组织测试:使用 Swift/Kotlin/JavaScript 编写测试脚本,使用设备规格配置环境,然后通过命令行或 API 运行。进行本地测试时使用模拟器;需要扩展规模时上传到云服务。务必先安装 Xcode(用于 iOS)或 Android SDK 等依赖项。示例模式:初始化测试、执行操作、断言结果并进行清理。
常用命令/API
使用以下确切命令进行测试:
-
XCUITest(iOS):使用
xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14' -only-testing:MyAppTests运行测试。为$XCUITEST_API_KEY等密钥传递环境变量。代码片段:
import XCTest class MyAppTests: XCTestCase { func testButtonTap() { /* assertions */ } } -
Espresso(Android):通过 Gradle 执行:
./gradlew connectedAndroidTest --tests com.example.MyTest。调试时可使用--stacktrace等标志。代码片段:
import androidx.test.espresso.Espresso; Espresso.onView(withId(R.id.my_button)).perform(click()); -
Detox:先使用
detox build -c ios.sim.release构建,再使用detox test -c ios.sim.release运行。在package.json中配置脚本。代码片段:
describe('Login', () => { it('should login', async () => { await element(by.id('username')).typeText('user'); }); }); -
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 请求,并使用 JSON 负载,在请求头中使用$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 等步骤,并处理屏幕截图等构建产物。并行运行时,在工作流中指定矩阵。
错误处理
按以下方式处理错误:对于 XCUITest,如果出现 "No such device",请检查目标设备字符串,并确保通过 xcrun simctl boot iPhone 14 启动模拟器。对于 Espresso,如果测试因超时失败,请在代码中添加 .withTimeout(5000)。对于不稳定的 Detox 测试,请使用 await waitFor(element).toBeVisible();。对于云服务,如果认证失败(例如 BrowserStack 返回 401),请验证 $BROWSERSTACK_ACCESS_KEY 并重试。解析 API 响应以查找错误,例如检查 HTTP 状态码并记录详细信息。常见修复方法:更新依赖项或配置中的设备配置文件。
具体用法示例
-
在本地模拟器上运行 XCUITest: 为按钮点击编写测试,然后执行:
xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14'。确保测试文件包含:func testExample() { XCTAssertTrue(app.buttons["Submit"].exists) }。这样可以快速验证 UI 元素。 -
在 BrowserStack 上传并运行测试: 首先,设置环境变量:
export BROWSERSTACK_ACCESS_KEY=your_key。然后,使用 cURL:curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" -X POST https://api-cloud.browserstack.com/app-automate/espresso/v2 -d '{"app": "bs://..."}'。这样可以在真实设备上运行测试,全面覆盖各种情况。
图谱关系
- 相关:testing-general(属于同一测试集群)
- 依赖:authentication-service(用于获取
$BROWSERSTACK_ACCESS_KEY等 API 密钥) - 集成:mobile-development(用于构建应用)
- 冲突:无
- 扩展:device-farm-management(通过云测试)