mcpField
T
testing-mobile

testing-mobile

github.com/alphaonedev测试与质量42 次安装
代码仓库

关于 testing-mobile

testing-mobile 技能指导 iOS 和 Android 应用的 UI 与端到端测试,涵盖多种测试框架、云端设备服务及基于截图的视觉回归检查。

主要功能

  1. 01使用 XCUITest 编写 iOS 测试
  2. 02使用 Espresso 自动化 Android 测试
  3. 03通过 Maestro 执行跨平台流程
  4. 04使用 Detox 进行端到端测试
  5. 05使用云端设备服务并捕获截图

适用场景

  1. 01在 iOS 模拟器验证 UI 交互
  2. 02在设备上运行 Android 回归测试
  3. 03通过云端设备服务测试应用构建
  4. 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 状态码并记录详细信息。常见修复方法:更新依赖项或配置中的设备配置文件。

具体用法示例

  1. 在本地模拟器上运行 XCUITest: 为按钮点击编写测试,然后执行:xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14'。确保测试文件包含:func testExample() { XCTAssertTrue(app.buttons["Submit"].exists) }。这样可以快速验证 UI 元素。

  2. 在 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(通过云测试)

评论

支持 Markdown