mcpField
T
testing-mobile-apps

testing-mobile-apps

github.com/jeremylongshore测试与质量2.9k54 次安装2 天前更新
代码仓库

关于 testing-mobile-apps

用于规划和运行移动应用自动化测试的技能,面向 iOS 模拟器和 Android 模拟器。涵盖常见界面流程、手势及平台特定行为,并支持多种移动测试框架。

主要功能

  1. 01iOS 与 Android 模拟器测试
  2. 02界面流程、手势和导航检查
  3. 03平台特定行为覆盖
  4. 04支持多种移动测试框架
  5. 05失败截图与测试报告

适用场景

  1. 01验证设备上的登录与导航流程
  2. 02测试权限、深层链接和通知
  3. 03检查无障碍功能与屏幕旋转
  4. 04为 CI 收集截图和报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill testing-mobile-apps

安装后在 Claude Code 中输入/testing-mobile-apps确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
README.md
references/
README.md
scripts/
README.md

详细介绍

移动应用测试

概述

在 iOS 模拟器和 Android 模拟器上执行自动化移动应用测试,涵盖 UI 交互、导航流程、手势处理和平台特定行为。支持 Appium、Detox(React Native)、XCUITest(原生 iOS)、Espresso(原生 Android)和 Maestro,可用于跨平台移动测试。

前提条件

  • 已安装移动测试框架(Appium、Detox、Maestro 或原生 XCUITest/Espresso)
  • 通过 Xcode 提供的 iOS 模拟器(仅限 macOS),或通过 Android SDK 提供的 Android 模拟器
  • 应用构建产物(.app、.apk 或 .ipa),或已打包的开发服务器(React Native)
  • 如果使用 Appium,已安装 Appium 驱动(Android 使用 uiautomator2,iOS 使用 xcuitest)
  • 用于基于 JavaScript 的测试运行器的 Node.js

说明

  1. 配置测试环境:
    • 列出目标设备/模拟器:指定操作系统版本、屏幕尺寸和方向。
    • 构建用于测试的应用(xcodebuild、./gradlew assembleDebug 或 npx react-native build)。
    • 启动模拟器,或连接实体设备。
    • 在目标设备上安装应用。
  2. 为核心移动交互创建测试用例:
    • 点击和导航:点击按钮,在屏幕之间导航,并验证返回导航。
    • 文本输入:填写表单,验证键盘行为,测试自动补全和粘贴。
    • 滚动:滚动列表,验证延迟加载,并测试下拉刷新。
    • 手势:滑动(轮播)、双指缩放、长按、拖放。
    • 系统交互:处理权限对话框、推送通知和深层链接。
  3. 测试平台特定行为:
    • iOS:安全区内边距、刘海屏适配、Dynamic Type、VoiceOver 辅助功能。
    • Android:返回按钮行为、多窗口、不同的导航模式、TalkBack。
    • 两者均需测试:屏幕旋转(竖屏/横屏)、深色模式、低电量模式。
  4. 实现特定设备的测试配置:
    • 为每种设备/操作系统组合定义能力集。
    • 使用测试标签,在特定平台上运行部分测试(@ios、@android)。
    • 配置失败时截取屏幕截图,以便进行视觉调试。
  5. 处理移动设备上的异步行为:
    • 在断言前等待动画完成。
    • 使用显式等待处理网络加载指示器。
    • 考虑可能中断测试流程的系统对话框(权限、更新)。
  6. 运行测试套件并收集结果:
    • 按平台执行测试:npx detox test --configuration ios.sim.debug。
    • 收集设备日志、屏幕截图和崩溃报告。
    • 生成 JUnit XML 或 Allure 报告,以便集成到 CI。
  7. 设置移动测试 CI 流水线(iOS 使用 GitHub Actions macOS 运行器,Android 使用 Linux 运行器)。

输出

  • 按功能/流程整理在 tests/mobile/ 或 e2e/ 中的移动测试文件
  • 每种目标设备/操作系统组合的设备配置文件
  • 用于视觉验证和失败调试的屏幕截图
  • 包含设备特定元数据的 JUnit XML 格式测试结果
  • 用于自动执行移动测试的 CI 流水线配置

错误处理

错误原因解决方案
模拟器无法启动磁盘空间不足或模拟器映像损坏删除派生数据并重置模拟器;增加磁盘分配;重新创建模拟器 AVD
测试期间应用在启动时崩溃缺少权限或操作系统版本不兼容检查最低部署目标;在测试设置中授予所需权限;验证应用签名
未找到元素元素 ID 已更改或屏幕尚未加载完成使用无障碍 ID 代替 XPath;添加显式等待;交互前验证元素是否可见
测试在 CI 上不稳定,但在本地通过CI 运行器的 CPU/GPU 较慢,影响动画和时序增加 CI 的等待超时时间;在开发者设置中禁用动画;使用专用 CI 硬件
权限对话框阻止测试系统警告框显示在应用 UI 上方在测试设置中自动关闭警告框;通过 xcrun simctl 或 ADB 命令预先授予权限

示例

React Native 登录流程的 Detox 测试:

describe('Login Flow', () => {
  beforeAll(async () => { await device.launchApp(); });
  beforeEach(async () => { await device.reloadReactNative(); });

  it('logs in with valid credentials', async () => {
    await element(by.id('email-input')).typeText('[email protected]');
    await element(by.id('password-input')).typeText('password123');
    await element(by.id('login-button')).tap();
    await expect(element(by.id('home-screen'))).toBeVisible();
  });
});

Maestro 流程文件:

appId: com.example.myapp
---
- launchApp
- tapOn: "Sign In"
- inputText:
    id: "email-input"
    text: "[email protected]"
- inputText:
    id: "password-input"
    text: "password123"
- tapOn: "Submit"
- assertVisible: "Welcome"

资源

评论

支持 Markdown