|
1 | 1 | # TestPilot AI 开发备忘录 |
2 | 2 |
|
3 | | -> 最后更新:2026-03-12(桌面测试增强 | 97%通过率 | client区域截图+pywinauto+AI OCR | 坑16-22) |
| 3 | +> 最后更新:2026-03-15(AI中枢v12.0-12.2完成 | L0.5规则预判+L2归因+FaultType标签 | 坑16-22) |
4 | 4 | > 项目结构详见 README.md,此处不重复。 |
5 | 5 |
|
6 | 6 | --- |
@@ -107,6 +107,9 @@ git pull && poetry install && cd desktop && npm install && npm run build |
107 | 107 | | v10.1 | ✅ IDE插件蓝本生成重设计:<br>**废弃**:URL→AI爬取HTML→生成蓝本(原理缺陷:看不到JS逻辑/未触发状态/容易超时)<br>**新方案**:插件提供「📋 复制蓝本生成提示词」按钮 → 用户粘贴到Cursor/Windsurf → 编程AI读源码生成精准蓝本<br>核心哲学:**编程AI是第一负责人**,TestPilot只做执行器 | |
108 | 108 | | v10.2 | ✅ 蓝本生成提示词13条黄金规则(含深度Bug挖掘+功能文档参考+截图策略+功能模块拆分+增量更新)| |
109 | 109 | | v10.3 | ✅ **截图策略修复+Session管理**(commit 2115af2):<br>**Bug修复**:引擎每步都截图→改为按需截图(仅蓝本写了screenshot或有expected时)<br>**Session清理**:安卓项目切换后旧session残留→自动检测失效并清理<br>**蓝本拆分验证**:mobile-demo拆为5个功能模块蓝本,PC测试249/251通过(99.2%) | |
| 110 | +| v12.0 | ✅ **AI中枢决策层AIHub**(commit 85b0481):跨平台统一AI大脑,L0直通→L1弹窗自愈→L2失败诊断→L3场景熔断,Bridge模式接入三大Runner | |
| 111 | +| v12.1 | ✅ **L2升级:截图+步骤历史**(commit bea4c10):StepRecord自然语言描述,L2发截图+历史问AI像人一样分析,三Runner统一record_step | |
| 112 | +| v12.2 | ✅ **归因预判FaultType**(commit 6f634e1):L0.5规则预判零token判定APP Bug,L2提示词加fault归因,Bug标签[应用Bug]/[测试问题] | |
110 | 113 |
|
111 | 114 | - 测试总数:**932个**,全部通过 |
112 | 115 | - 引擎端口:**8900**(统一) |
@@ -2116,3 +2119,58 @@ if bp_dir.name == "testpilot": |
2116 | 2119 | - `mobile_blueprint_runner.py` 导入测试:✅ OK |
2117 | 2120 | - 引擎启动(端口8900):✅ 正常,无报错 |
2118 | 2121 | - API健康检查:✅ 200 OK |
| 2122 | + |
| 2123 | +#### 13.23.4 L2升级:截图+步骤历史直接问AI(v12.1, 2026-03-14) |
| 2124 | + |
| 2125 | +**核心改进:** L2不再只看当前步骤,而是把最近8步操作历史一起发给AI,像"坐在你旁边的同事看图说话"。 |
| 2126 | + |
| 2127 | +**新增类/字段:** |
| 2128 | +- `StepRecord` dataclass:step_num/action/target/value/passed/error + `describe()` 方法(自然语言描述) |
| 2129 | +- `AIHub._step_history`:最近8步操作记录列表 |
| 2130 | +- `AIHub.record_step()`:Runner每步执行完都调用 |
| 2131 | +- `AIHub._build_history_context()`:拼成大白话历史供L2分析 |
| 2132 | +- `AIHub.on_scenario_start()`:场景开始时清空历史 |
| 2133 | + |
| 2134 | +**L2提示词核心改变:** 把步骤历史+当前失败+截图三合一发给多模态AI,AI像人一样观察分析。 |
| 2135 | + |
| 2136 | +**三Runner改造:** |
| 2137 | +- 每步执行后统一调用 `hub.record_step(step_num, action, target, value, passed, error)` |
| 2138 | +- SKIP_STEP 处理:三个Runner统一支持 |
| 2139 | + |
| 2140 | +**验证(故意打破蓝本测试L2):** |
| 2141 | +- 改坏 `add_priority.testpilot.json`:选择器写错 + 断言不可能通过 |
| 2142 | +- L2成功诊断:"添加的High优先级任务实际显示为Medium优先级"(AI看截图看到了`[M] Fix critical bug`) |
| 2143 | +- 结果:7/9通过,2个Bug正确识别,L1调2次,L2调2次 |
| 2144 | + |
| 2145 | +**发现的问题:** |
| 2146 | +- JSON中文引号导致`json.loads`失败(`"xxx"` → 需替换为`"xxx"`) |
| 2147 | +- 大截图(393KB)可能超AI超时(25秒) |
| 2148 | + |
| 2149 | +#### 13.23.5 归因预判:谁的锅?(v12.2, 2026-03-14) |
| 2150 | + |
| 2151 | +**问题:** 所有失败都调AI分析 → 浪费token。但"文本不匹配"这种100%是应用Bug,不需要AI看。 |
| 2152 | + |
| 2153 | +**L0.5规则预判(零token):** |
| 2154 | +``` |
| 2155 | +步骤失败 → AIHub.on_step_failed() |
| 2156 | + → L3 熔断(无AI) |
| 2157 | + → L0.5 规则预判(无AI) |
| 2158 | + ├─ "文本断言失败: 预期'X', 实际'Y'" → APP Bug,不调AI ✅ |
| 2159 | + ├─ "计算验证失败" → APP Bug,不调AI ✅ |
| 2160 | + └─ 其他 → 继续L1/L2(调AI) |
| 2161 | + → L1 弹窗自愈(AI截图) |
| 2162 | + → L2 失败诊断+归因(AI截图+历史) |
| 2163 | +``` |
| 2164 | + |
| 2165 | +**新增 `FaultType` 枚举:** |
| 2166 | +- `APP` — 应用的Bug(数据错误/崩溃/功能异常)→ 报给编程AI |
| 2167 | +- `TEST` — 测试脚本/框架问题(选择器错/时序/弹窗)→ 中枢自己处理 |
| 2168 | +- `UNKNOWN` — 无法判断 |
| 2169 | + |
| 2170 | +**Bug标签系统:** Runner根据 `decision.fault` 给Bug.category加前缀: |
| 2171 | +- `[应用Bug]文本断言失败` → 编程AI该修 |
| 2172 | +- `[测试问题]步骤执行错误` → 我们的问题,编程AI不用管 |
| 2173 | + |
| 2174 | +**L2提示词升级:** 要求AI同时判断fault归因 + 中文引号容错修复 |
| 2175 | + |
| 2176 | +**统计新增:** `hub.stats["rule_judgments"]` — 规则预判次数(省了多少次AI调用) |
0 commit comments