Improve controller behavior and update project requirements
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Android 按变更影响选测(当前规则)
|
||||
|
||||
适用 MOBILE-TEST-SELECTION、TEST-MOBILE-SELECTION、TEST-MOBILE-INTEGRATION。本文优先于历史版本专项验收中的固定执行顺序。授权决定怎样操作设备,不代表每轮必须使用设备。
|
||||
|
||||
## 选择范围
|
||||
|
||||
先列变更、直接调用与共享依赖影响,再选择能提供足够证据的最低层级。不能仅以页面文件未修改判定无影响,也不能以新功能提交/打包为由自动重跑所有页面。
|
||||
|
||||
| 变更 | 默认验证 | 升级为定向真机的条件 |
|
||||
|---|---|---|
|
||||
| 文档、映射 | 文档一致性、仓库卫生 | 无 |
|
||||
| 解析、校验、业务状态 | sharedCore JVM / 双端协议测试 | 实际平台交互改变或模拟无法解释故障 |
|
||||
| 文案、布局、表单、导航 | 受影响 uiTest 场景,baseline 配置 | 厂商/实际设备特有问题或模拟证据不足 |
|
||||
| BLE/GATT/握手/重连 | 单元测试和对应真机连接场景 | 必须覆盖实际改变的通信路径 |
|
||||
| 权限、Activity/后台 | 相应 Android 平台测试;必要真机 | 真实蓝牙权限、MIUI、后台限制改变 |
|
||||
| WiFi | 校验和模拟器 settings | 激活、切换、恢复实现改变才真正切网 |
|
||||
| 构建、SDK、依赖 | 构建及受影响兼容性 | 覆盖安装、关键通信或平台风险 |
|
||||
| systemd、部署、驱动 | 设备侧既有流程 | 不因普通手机界面修改触发 |
|
||||
|
||||
共享导航/主题影响多个页面时覆盖相关页面;局部修改不测无影响页面。模拟器同样按需:默认单一 baseline;布局适配才增加 narrow/large-font/landscape;API/权限兼容变化才增加相关 API 的 AVD。不能用 API 35 的模拟界面结果冒充 API 26/30/31+ 权限验收。
|
||||
|
||||
全量仅在明确完整验收或影响无法可靠收敛时使用,写明原因。`--full-common` 是明确定义的四项公共回归,不等于全量验收;切网、写入、长轮询和异常恢复始终单独选择。发布候选仍按发布风险选择关键链路,打包成功不代表验收成功。
|
||||
|
||||
已运行且相关的低成本回归通过后,不无理由重复运行。必要的测试因环境缺失没做,记录“未验证”;无影响的测试记录“按影响跳过”。没有自动将失败改成跳过的机制。
|
||||
|
||||
## 场景和稳定编号映射
|
||||
|
||||
| 层级/入口 | 场景 | 对应编号 / 依赖与副作用 |
|
||||
|---|---|---|
|
||||
| sharedCore:jvmTest | 现有协议、状态、恢复、超时、加密 | ANDROID-TEST-CONTRACT / STATE;无设备 |
|
||||
| uiTest 模拟器 | connection/status/content/settings/navigation/layout | ANDROID-TEST-UI;测试专用假平台,实际界面与 Controller |
|
||||
| run_ble_test.py | connection | ANDROID-TEST-BLE;真实扫描/握手/断开/重新扫描重连 |
|
||||
| 同上 | data / library-order | ANDROID-TEST-BLE / CONTROL;只读,只有 order 读取板端目录摘要 |
|
||||
| 同上 | library-cache | ANDROID-TEST-LIBRARY-CACHE;登记手机与核桃派只读,两轮图片后重新连接,报告图片请求数与 PNG 负载字节数,不改变显示内容 |
|
||||
| 同上 | cache-storage | ANDROID-TEST-LIBRARY-CACHE;登记手机的隔离缓存目录验证跨设备隔离、损坏保护与清空,不访问核桃派 |
|
||||
| 同上 | conflict / wifi-scan | ANDROID-TEST-CONTRACT / WIFI;过期修订拒绝 / 板端扫描;不切网 |
|
||||
| 同上 | polling | ANDROID-TEST-PERF;最多 60 轮状态/帧读取,不替代性能因果对照 |
|
||||
| 同上 | controller-background / activity-background | ANDROID-TEST-STATE / BLE;后台释放与重连 |
|
||||
| 同上 | navigation | ANDROID-TEST-UI;登记真机 root 导航;临时撤销并恢复蓝牙权限防止旧记忆自动连接,不访问板端 |
|
||||
| 同上 | rename / remember | ANDROID-TEST-UI / STATE;昵称恢复 / 忘记后重新连接 |
|
||||
| 同上 | bluetooth-toggle | ANDROID-TEST-PERMISSION;真实关闭并恢复蓝牙 |
|
||||
| 同上 | connection-entry / layout | ANDROID-TEST-UI;条目重扫/断开/再连;layout 另加三组布局和帧边界 |
|
||||
| 同上 | controls / wifi-reapply | ANDROID-TEST-CONTROL / WIFI;当前值写入和动画恢复 / 当前网络重新激活,须明确选择 |
|
||||
| run_wifi_switch_test.py | --validate-only / --wrong-only / --skip-wrong / --final-check | ANDROID-TEST-WIFI;四者必须且只能选一个,后两类切网专项按原恢复规则 |
|
||||
|
||||
每个真机场景单独建立/释放会话。普通 UI 首选模拟器;真机 navigation 是厂商输入等特定问题的补证入口。`connection-entry` 不改变密度/字体/方向;`layout` 才做原有三组配置。其它设备生命周期、双手机、性能采样仍按各自编号的触发条件独立执行。
|
||||
|
||||
## 可复现命令
|
||||
|
||||
先阅读排障指南。命令从仓库根执行,路径参数使用本机已安装工具的真实路径,不把路径写进仓库。电脑远端联调使用已有安装 Paramiko 的环境;依赖见 requirements-host.txt,不加入核桃派依赖。
|
||||
|
||||
```text
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_ble_test.py" --list-scenarios
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_ble_test.py" --scenario connection --dry-run
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_ble_test.py" --scenario connection --adb "<ADB路径>" --build "<隔离工程目录>"
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_emulator_ui_test.py" --scenario settings --dry-run
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_emulator_ui_test.py" --scenario settings --avd "<AVD名称>" --adb "<ADB路径>" --emulator "<已安装Emulator路径>" --build "<隔离工程目录>" --report "<新的结果JSON路径>"
|
||||
python "移动端相关内容/安卓app/如何安卓测试/run_wifi_switch_test.py" --validate-only --dry-run
|
||||
```
|
||||
|
||||
构建沿用 build_android.py,任务按需指定:`:sharedCore:jvmTest`、`:androidApp:assembleDebug`、`:androidApp:assembleDebugAndroidTest`、`:uiTest:assembleDebug`。uiTest 是 self-instrumenting 测试 APK;只安装到明确选择且核验过的 AVD,不装到登记真机,不安装产品 APK。fake platform/transport、测试 Activity 均只存在于 uiTest;不调用真实 BLE、SSH、摄像头,不声明真实权限验收。
|
||||
|
||||
模拟器入口支持重复 `--scenario` 和 `--configuration`;默认 baseline,只在明确完整 UI 验收时用 `--all-ui`。复用 Android Studio Device Manager 的 AVD;缺少时用 SDK avdmanager 创建专用 AVD,使用官方系统镜像。`--port` 默认 5580,启动前指定 AVD、连接后核对名称和 ro.kernel.qemu,拒绝物理手机或不匹配目标。可用 `--sysdir` 指向独立存储的系统镜像。只关闭本次启动的模拟器;字体、方向、密度恢复并核验。不能擅自 wipe-data 或覆盖已有 AVD。
|
||||
|
||||
所有运行器无场景时只显示用法;列表/预览不访问登记、凭据、ADB、SSH。非法组合在设备访问前拒绝。旧 `--test activity`、无参数默认 BLE 的命令已取消:分别改用明确的 `--scenario`。run_ui_layout_test.py 保留转发入口,也必须显式选 layout 或 connection-entry(推荐统一用 run_ble_test.py)。
|
||||
|
||||
## 证据与边界
|
||||
|
||||
每轮归档填写:
|
||||
|
||||
```text
|
||||
变更及共享影响:
|
||||
选中编号 / 场景 / 环境 / 配置 / 选择理由:
|
||||
源码摘要、App/设备/协议版本(只记与本轮相关者):
|
||||
结果:通过 / 失败 / 按影响跳过 / 必要但未验证
|
||||
跳过项及理由:
|
||||
失败、清理、恢复核验、重测及未解决边界:
|
||||
经验更新位置:
|
||||
```
|
||||
|
||||
宿主调度检查:`python -m unittest discover -s "移动端相关内容/安卓app/如何安卓测试" -p "test_test_selection.py"`。这是运行器选测/失败恢复测试,不代表 BLE/模拟器已经通过。
|
||||
|
||||
模拟 UI 已覆盖空状态、扫描错误恢复、导航、WiFi 空名称禁用及确认取消、内容读入和帧布局。没有实现的 OS 权限矩阵和完整 Activity 状态恢复不冒充已覆盖;今后相关功能变化时补相应测试。语义/边界断言不证明文字实际运动或视觉质量。视觉和电气门禁不变。
|
||||
|
||||
## 官方依据(2026-09-29 核对)
|
||||
|
||||
- [Android 测试策略](https://developer.android.com/training/testing/fundamentals/strategies):选择最低有效层级,并非每个功能都在所有层级重复验证。
|
||||
- [Compose 独立测试](https://developer.android.com/develop/ui/compose/testing/common-patterns):隔离界面输入,使用测试 API 验证行为。
|
||||
- [Android 测试基础](https://developer.android.com/training/testing/fundamentals):instrumentation 可运行于真机或模拟器。
|
||||
- [模拟器网络能力](https://developer.android.com/studio/run/emulator-networking):新版本支持部分 Bluetooth 模拟,不能笼统写“模拟器完全不支持 BLE”;本项目 fake 测试仍不等于物理射频、实际核桃派或厂商兼容验证。
|
||||
|
||||
以上是制定项目选测规则的依据,具体场景划分是本项目的工程选择,不是官方强制清单。
|
||||
Reference in New Issue
Block a user