feat(tester): require caller artifact locators instead of --release
Mobile runs now take --artifact android|ios=<path-or-url> from the caller and create a fresh isolated worktree each time. Drop CI release/manifest lookup.
This commit is contained in:
@@ -18,9 +18,9 @@ Android | … | … | page.writes | tester.android | local-app
|
||||
iOS | … | … | page.writes | tester.ios | remote-ios
|
||||
```
|
||||
|
||||
矩阵来源按优先级使用:用户明确指定的产物、builder/CI 已成功并已 obtain 的产物、
|
||||
项目本地明确标记的候选产物。不能根据“曾经构建成功过”或 `builder.<platform>`
|
||||
绑定猜测本轮产物。缺少路径、下载地址、commit 或平台身份时,先报告“待确认”并停止。
|
||||
矩阵里的产物位置必须由调用方给出,值为本地文件或 URL。不能根据“曾经构建成功过”、
|
||||
`builder.<platform>` 绑定、CI release 名或本机旧文件猜测本轮产物。缺少路径或下载
|
||||
地址时,先报告“待确认”并停止。
|
||||
|
||||
平台绑定是测试执行目标,不是构建目标:`builder.ios` 只能证明构建配置,不能替代
|
||||
`tester.ios`;`builder.android` 同理。多平台运行不得使用无法表达平台的通用
|
||||
@@ -28,8 +28,8 @@ iOS | … | … | page.writes | tester.ios | remote-ios
|
||||
|
||||
完成矩阵后,按以下顺序检查**所有行**,但不执行测试用例:
|
||||
|
||||
1. 产物:文件或下载地址存在,SHA/commit(若有)与本轮目标一致;Android APK 的
|
||||
package、iOS IPA 的 Bundle ID 与矩阵一致。
|
||||
1. 产物:调用方给出的文件或下载地址存在;Android APK 的 package、iOS IPA 的
|
||||
Bundle ID 与 catalog 契约(若有)一致。
|
||||
2. 执行目标:按 [execution.md](execution.md) 精确解析每个平台的 `tester` 绑定;
|
||||
不允许把本机 worktree 当成远程 Mac 的 worktree,也不允许用旧 commit 的远程目录
|
||||
代替本轮产物对应的项目目录。
|
||||
@@ -118,22 +118,22 @@ python3 <skill-dir>/scripts/catalog.py select --root <root> \
|
||||
|
||||
`driver=mobile` 不是一个可以互换的平台。运行前必须根据 catalog session、用例变量或用户指定,明确本轮是 Android 还是 iOS;无法判断时先停下询问平台,不得猜测。两类平台分别执行以下闸门:
|
||||
|
||||
### Android(CI bundle 模式)
|
||||
### Android
|
||||
|
||||
按顺序确认:
|
||||
|
||||
1. `adb` 可执行,且版本与当前 SDK 配置一致。
|
||||
2. `adb devices -l` 至少有一个状态为 `device` 的目标;`unauthorized`、`offline` 或空列表都不能继续。多个目标时必须显式设置 `ANDROID_SERIAL`。
|
||||
3. 如果命令带 `--release`,由 tester skill 下载 CI manifest 指定的 APK,校验 sha256、读取 APK 身份,自动执行 `adb install -r`,再用 `adb -s "$ANDROID_SERIAL" shell pm path <package>` 验证。没有 `--release` 时才沿用已有 APK 前置条件。
|
||||
3. 调用方已给出本轮 APK 的本地路径或 URL。由 tester skill 取用或下载该文件,读取 APK 身份,自动执行 `adb install -r`,再用 `adb -s "$ANDROID_SERIAL" shell pm path <package>` 验证。
|
||||
4. 测试所需的 HOST、端口、局域网/DNS 和权限可从设备访问。
|
||||
|
||||
### iOS(CI bundle 模式)
|
||||
### iOS
|
||||
|
||||
按顺序确认:
|
||||
|
||||
1. 运行节点是 macOS,并且 `xcrun`、Xcode Command Line Tools 和 `simctl` 可用。Linux/Windows 节点不能伪装成 iOS 环境;需要 macOS 或可访问的远程 Mac。
|
||||
2. 模拟器用 `xcrun simctl list devices available` 确认目标存在且已启动,再用 `xcrun simctl bootstatus <UDID> -b` 确认完成启动;真机用 `xcrun xctrace list devices` 确认已连接、已信任且允许开发。
|
||||
3. 如果命令带 `--release`,由 tester skill 在 tester.ios 的 Mac 下载 CI manifest 指定的 IPA,解包读取 `Payload/*.app/Info.plist`,校验 sha256 和 Bundle ID,自动执行 `xcrun simctl install`,再用 `xcrun simctl get_app_container <UDID> <BUNDLE_ID>` 验证。没有 `--release` 时才沿用已有 App 前置条件。
|
||||
3. 调用方已给出本轮 IPA 的本地路径或 URL。由 tester skill 在 tester.ios 的 Mac 取用或下载该文件,解包读取 `Payload/*.app/Info.plist`,校验 Bundle ID,自动执行 `xcrun simctl install`,再用 `xcrun simctl get_app_container <UDID> <BUNDLE_ID>` 验证。
|
||||
4. 测试所需的 HOST、端口、局域网/DNS 和权限可从该模拟器/真机访问。
|
||||
|
||||
Android+iOS 默认是全量 preflight 闸门:任一项不满足,另一平台也不得安装或执行,并在记录中标为 `not-run`。只有用户显式加 `--partial` 才允许已通过的平台继续。不能改成 API 测试、不能把它们标成产品 `fail`,也不要继续初始化被闸门挡住的平台 session。记录实际探测命令及简短输出,不要把整段设备日志塞进对话。
|
||||
@@ -163,7 +163,7 @@ Android+iOS 默认是全量 preflight 闸门:任一项不满足,另一平台
|
||||
可按实际缺失替换为以下平台化提示:
|
||||
|
||||
- Android 无设备:提示用户连接并解锁设备、开启 USB 调试、接受 RSA 授权;多个设备时设置 `ANDROID_SERIAL`;再运行 `adb devices -l`,直到目标状态为 `device`。
|
||||
- Android 未安装 APK:提示用户构建/安装与当前测试环境匹配的 APK,并用 `adb -s "$ANDROID_SERIAL" shell pm path "$PACKAGE"` 验证包名。
|
||||
- Android 缺少产物位置:停下向调用方要本轮 APK 的本地路径或 URL,不要手工 scp 或沿用旧包。
|
||||
- iOS 非 macOS 或无 Xcode:明确说明 iOS 测试需要 macOS + Xcode/Command Line Tools,提示用户切换到本机 Mac 或配置可访问的远程 Mac;不要建议在 Linux 上安装一个同名命令来绕过检查。
|
||||
- iOS 模拟器未启动:提示用户在 Xcode 或 `simctl` 中创建/启动可用设备,使用 `xcrun simctl bootstatus <UDID> -b` 验证。
|
||||
- iOS 真机未就绪:提示用户连接数据线、解锁并信任此电脑、开启开发者模式并确认设备出现在 `xcrun xctrace list devices`。
|
||||
|
||||
Reference in New Issue
Block a user