关于 testing-mobile-apps
用于规划和运行移动应用自动化测试的技能,面向 iOS 模拟器和 Android 模拟器。涵盖常见界面流程、手势及平台特定行为,并支持多种移动测试框架。
主要功能
- 01iOS 与 Android 模拟器测试
- 02界面流程、手势和导航检查
- 03平台特定行为覆盖
- 04支持多种移动测试框架
- 05失败截图与测试报告
适用场景
- 01验证设备上的登录与导航流程
- 02测试权限、深层链接和通知
- 03检查无障碍功能与屏幕旋转
- 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.mdreferences/README.mdscripts/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
说明
- 配置测试环境:
- 列出目标设备/模拟器:指定操作系统版本、屏幕尺寸和方向。
- 构建用于测试的应用(
xcodebuild、./gradlew assembleDebug或npx react-native build)。 - 启动模拟器,或连接实体设备。
- 在目标设备上安装应用。
- 为核心移动交互创建测试用例:
- 点击和导航:点击按钮,在屏幕之间导航,并验证返回导航。
- 文本输入:填写表单,验证键盘行为,测试自动补全和粘贴。
- 滚动:滚动列表,验证延迟加载,并测试下拉刷新。
- 手势:滑动(轮播)、双指缩放、长按、拖放。
- 系统交互:处理权限对话框、推送通知和深层链接。
- 测试平台特定行为:
- iOS:安全区内边距、刘海屏适配、Dynamic Type、VoiceOver 辅助功能。
- Android:返回按钮行为、多窗口、不同的导航模式、TalkBack。
- 两者均需测试:屏幕旋转(竖屏/横屏)、深色模式、低电量模式。
- 实现特定设备的测试配置:
- 为每种设备/操作系统组合定义能力集。
- 使用测试标签,在特定平台上运行部分测试(
@ios、@android)。 - 配置失败时截取屏幕截图,以便进行视觉调试。
- 处理移动设备上的异步行为:
- 在断言前等待动画完成。
- 使用显式等待处理网络加载指示器。
- 考虑可能中断测试流程的系统对话框(权限、更新)。
- 运行测试套件并收集结果:
- 按平台执行测试:
npx detox test --configuration ios.sim.debug。 - 收集设备日志、屏幕截图和崩溃报告。
- 生成 JUnit XML 或 Allure 报告,以便集成到 CI。
- 按平台执行测试:
- 设置移动测试 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"
资源
- Appium 文档:https://appium.io/docs/en/latest/
- Detox(React Native):https://wix.github.io/Detox/
- Maestro 移动端测试:https://maestro.mobile.dev/
- XCUITest:
- Espresso(Android):https://developer.android.com/training/testing/espresso
评论
支持 Markdown