feat: add Android and iOS tester skills
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
# Android 真机路径
|
||||
|
||||
## 环境检查
|
||||
|
||||
按顺序执行并记录:
|
||||
|
||||
```bash
|
||||
adb start-server
|
||||
adb devices -l
|
||||
adb -s <serial> shell getprop ro.product.model
|
||||
adb -s <serial> shell getprop ro.build.version.sdk
|
||||
adb -s <serial> shell getprop sys.boot_completed
|
||||
```
|
||||
|
||||
规则:
|
||||
|
||||
- 没有设备:`environment-fail`。
|
||||
- `unauthorized`:提示用户在手机上授权,不自动绕过。
|
||||
- `offline`:停止,不把它当作产品失败。
|
||||
- 有多台设备但没有 `ANDROID_SERIAL`:停止,不猜设备。
|
||||
- `sys.boot_completed` 不是 `1`:等待有限时间,超时记 `environment-fail`。
|
||||
|
||||
## 执行
|
||||
|
||||
- 复用用户指定序列号,整轮测试不切换设备。
|
||||
- 只执行选中的 `driver: mobile` 用例。
|
||||
- 不自动安装 APK;安装必须有 APK、包名和明确的 mutating 授权。
|
||||
- 测试失败时收集目标设备的 logcat 尾部和当前屏幕截图。
|
||||
|
||||
## 收尾
|
||||
|
||||
- 不关机、不重启、不清除应用数据。
|
||||
- 停止由本轮启动的 ADB server 之前要确认没有其他测试会话依赖它。
|
||||
- 设备保留原状态,并在结果中记录。
|
||||
@@ -0,0 +1,33 @@
|
||||
# Android 模拟器路径
|
||||
|
||||
## 环境检查
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
emulator -accel-check
|
||||
emulator -list-avds
|
||||
```
|
||||
|
||||
必须同时满足:
|
||||
|
||||
- KVM 可用。
|
||||
- 指定 AVD 存在。
|
||||
- AVD 的 system image 与 x86_64 主机匹配。
|
||||
- 没有被 VirtualBox、VMware 或 Docker 等外层虚拟化阻断。
|
||||
|
||||
## 启动与等待
|
||||
|
||||
- 如果目标 AVD 已运行,检查序列号和 AVD 名称后复用。
|
||||
- 如果没有运行,启动用户指定的 AVD,不创建替代 AVD。
|
||||
- 使用 ADB 等待设备出现,并等待 `sys.boot_completed=1`。
|
||||
- 启动失败、启动超时或 KVM 失效都记为 `environment-fail`。
|
||||
- 无桌面服务器时可使用 `-no-window -no-audio`,但必须先确认测试不需要可视化交互。
|
||||
|
||||
## 执行与收尾
|
||||
|
||||
- 一轮测试只绑定一个 AVD。
|
||||
- 需要安装 APK 或清数据时按 mutating 规则处理。
|
||||
- 测试失败时保存 logcat、模拟器信息和截图。
|
||||
- 只关闭本轮由 skill 启动且配置为临时会话的模拟器。
|
||||
- 不删除 AVD、不修改系统镜像、不覆盖用户已有配置。
|
||||
@@ -0,0 +1,45 @@
|
||||
# Android 通用环境检查
|
||||
|
||||
本文件只读检查,不安装软件、不修改设备。
|
||||
|
||||
## 项目检查
|
||||
|
||||
1. 确认项目根目录。
|
||||
2. 确认 `.pouch/tester/catalog.yaml` 存在且 `validate` 通过。
|
||||
3. 只选择 `driver: mobile` 的用例。
|
||||
4. 读取 `.pouch/tester/local.yaml`;缺少 Android 目标配置时停止,不猜目标。
|
||||
|
||||
推荐的本地配置字段:
|
||||
|
||||
```yaml
|
||||
ANDROID_TARGET_MODE: device
|
||||
ANDROID_SERIAL: ""
|
||||
ANDROID_AVD: ""
|
||||
ANDROID_PACKAGE: ""
|
||||
ANDROID_APK: ""
|
||||
ANDROID_ACTIVITY: ""
|
||||
```
|
||||
|
||||
## 主机检查
|
||||
|
||||
- `uname -m` 必须是 `x86_64`。
|
||||
- `adb` 必须可执行。
|
||||
- 模拟器路径还必须有 `emulator`、`sdkmanager` 和 KVM。
|
||||
- 记录 Android SDK 根目录、工具版本和当前用户。
|
||||
|
||||
未安装工具属于 `environment-fail`。不要在普通测试运行中顺手安装;安装只能进入
|
||||
明确的 Debian 安装模式。
|
||||
|
||||
## 运行前报告
|
||||
|
||||
先报告:
|
||||
|
||||
```text
|
||||
目标: 真机 | 模拟器
|
||||
项目测试目录: 已找到 | 缺失
|
||||
ADB: 通过 | 缺失
|
||||
模拟器工具链: 通过 | 缺失 | 不适用
|
||||
KVM: 通过 | 缺失 | 不适用
|
||||
目标设备: 已解析 | 未解析
|
||||
结论: 可执行 | environment-fail
|
||||
```
|
||||
@@ -0,0 +1,95 @@
|
||||
# Debian 安装 Android 模拟器
|
||||
|
||||
只支持 Debian amd64/x86_64。不要在 Ubuntu、其他发行版、ARM 主机或嵌套虚拟机中执行
|
||||
本流程。Android 官方 Linux 模拟器依赖 KVM;Android SDK Command-line Tools 提供
|
||||
`sdkmanager`,Emulator 和 Platform-Tools 作为 SDK 包安装。
|
||||
|
||||
## 1. 检查并确认变更
|
||||
|
||||
读取 `/etc/os-release`,必须满足:
|
||||
|
||||
```bash
|
||||
test "$(. /etc/os-release && printf '%s' "$ID")" = debian
|
||||
test "$(dpkg --print-architecture)" = amd64
|
||||
```
|
||||
|
||||
安装前向用户展示:
|
||||
|
||||
- 将通过 apt 安装的 Debian 包。
|
||||
- Android SDK 目录,默认 `~/Android/Sdk`。
|
||||
- 要下载的 Emulator、Platform-Tools、Command-line Tools 和 system image。
|
||||
- 会把当前用户加入 `kvm`、`libvirt` 组,通常需要重新登录。
|
||||
- 是否创建 AVD,以及 AVD 名称、API、镜像和设备 profile。
|
||||
|
||||
没有明确安装请求或用户未确认这些变更时,只输出检查结果,不执行 sudo、apt 或下载。
|
||||
|
||||
## 2. 安装 Debian 主机依赖
|
||||
|
||||
在用户确认后安装:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install cpu-checker qemu-kvm libvirt-daemon-system \
|
||||
libvirt-clients bridge-utils curl ca-certificates unzip
|
||||
sudo usermod -aG kvm,libvirt "$USER"
|
||||
```
|
||||
|
||||
检查:
|
||||
|
||||
```bash
|
||||
kvm-ok
|
||||
ls -l /dev/kvm
|
||||
```
|
||||
|
||||
若没有硬件虚拟化或 `/dev/kvm`,停止并报告安装失败。不要降级为极慢的软件模拟。
|
||||
|
||||
## 3. 安装 Android SDK 工具
|
||||
|
||||
优先使用 Android 官方 Linux Command-line Tools。若机器已有 `sdkmanager`,复用现有
|
||||
SDK 根目录;否则从 Android 官方下载页获取 Linux Command-line Tools,解压为:
|
||||
|
||||
```text
|
||||
~/Android/Sdk/cmdline-tools/latest/
|
||||
```
|
||||
|
||||
安装并接受 SDK 许可后,执行:
|
||||
|
||||
```bash
|
||||
sdkmanager --install \
|
||||
"platform-tools" \
|
||||
"emulator" \
|
||||
"cmdline-tools;latest"
|
||||
```
|
||||
|
||||
系统镜像由项目的 compile/target SDK 和用户明确选择的 API 决定。安装前先用
|
||||
`sdkmanager --list` 查找可用的 `google_apis;x86_64` 镜像,不猜一个不可用的版本。
|
||||
|
||||
## 4. 创建 AVD
|
||||
|
||||
只有用户明确要求创建 AVD 时执行。优先使用当前 SDK 提供的 Android CLI;兼容环境可
|
||||
使用 `avdmanager` 创建一个明确命名、明确 API 和明确 x86_64 镜像的 AVD。创建后运行:
|
||||
|
||||
```bash
|
||||
emulator -list-avds
|
||||
emulator -accel-check
|
||||
emulator @<已确认的AVD名称>
|
||||
```
|
||||
|
||||
`<已确认的AVD名称>` 只表示用户已经选择的实际名称,不允许由 skill 静默猜测。
|
||||
|
||||
## 5. 安装完成报告
|
||||
|
||||
报告必须包含:
|
||||
|
||||
- Debian 版本和架构。
|
||||
- apt 安装包及结果。
|
||||
- SDK 根目录和工具版本。
|
||||
- 已安装的 system image。
|
||||
- AVD 名称和配置。
|
||||
- KVM 检查结果。
|
||||
- 是否需要重新登录。
|
||||
- 下一步是运行模拟器检查,还是直接执行测试。
|
||||
|
||||
安装 Android Studio 不是本模式的必要条件;该流程安装的是可由命令行运行的 Emulator
|
||||
工具链。参考:[Android 安装文档](https://developer.android.com/studio/install)、
|
||||
[KVM 加速文档](https://developer.android.com/studio/run/emulator-acceleration)。
|
||||
@@ -0,0 +1,29 @@
|
||||
# Android 结果报告
|
||||
|
||||
每轮运行都生成 `.pouch/tester/runs/<run-id>.yaml` 和同名 `.csv`。附加证据放在同名
|
||||
目录中,不覆盖已有 run。
|
||||
|
||||
对话报告格式:
|
||||
|
||||
```text
|
||||
## android-tester 运行:完成 | 部分完成 | 阻塞
|
||||
|
||||
路径: 真机 | 模拟器
|
||||
目标: 序列号/型号/API 或 AVD/API
|
||||
环境: 通过项;阻塞项
|
||||
计数: pass=N fail=N environment-fail=N skipped=N not-run=N
|
||||
失败: 用例 id + 一句证据
|
||||
跳过: 用例 id + 原因
|
||||
证据: logcat / 截图目录
|
||||
快照: .pouch/tester/runs/<run-id>.yaml
|
||||
成绩单: .pouch/tester/runs/<run-id>.csv
|
||||
下一步: 一句话
|
||||
```
|
||||
|
||||
判定规则:
|
||||
|
||||
- 工具缺失、设备不可用、启动超时:`environment-fail`。
|
||||
- 产品断言不满足:`fail`。
|
||||
- 风险未授权、用例主动不跑:`skipped`。
|
||||
- 失败即停后没有轮到的用例:`not-run`。
|
||||
- 不能把 ADB 命令退出码为 0 直接当成产品通过,必须对照用例的 `expected`。
|
||||
Reference in New Issue
Block a user