-
自动化框架:Playwright+Testng+Java
-
要解决的痛点:目前我们接口+UI自动化有6000来个,每天上班就要跟踪失败的自动化,非常耗时间
-
办法:半夜Jenkins job跑完,让AI去接收结果,AI去改失败的case,第二天上班看AI的代码Merge报告和总结,组员去审核没问题就合入代码
-
新问题:单个Job的log非常大,动辄几百MB甚至上GB,整段塞给 LLM 既废token又全是噪音。所以日志要先「瘦身」再进分析
-
日志瘦身方法:
1、不依赖log 做主分析 — 主证据来自结构化的 trace.zip(artifact),log只作辅助定位。
2、按测试用例边界 / 时间窗口切片 — 用 case 名、FAILED、时间戳定位失败那一段,只取该 case 的日志窗口(和 trace 解析同一套时间窗口思路)。
3、只留错误相关 — 抽 error / stacktrace + 失败点前后 N 行上下文,丢掉通过用例和大段 info 噪音。
4、去重 — 重试/轮询会刷大量重复行,先去重再保留。
5、token 预算截断 — 进 LL前按预算截断,保「头 + 尾 + 错误窗口」三段,避免中间无关内容挤占。
整体使用步骤如下:
- 解析 trace — 按测试用例的时间窗口过滤事件
- 静态分析 — 扫 error / stacktrace / logs,形成初步假设
- 提取证据 — 操作序列、失败详情、DOM 快照、截图、网络请求
- 截图确认 — 读关键帧(首帧 / 失败前 / 末帧),视觉验证页面状态
- 自动修复选择器 — DOM 变更导致选择器失效时,从实际 DOM 里找替代选择器并改测试文件
- 输出根因报告 — 时间线 + 证据链 + 可操作的修复建议
工具内置了对常见失败模式的识别:
| 模式 | 症状 | 根因 |
|---|---|---|
| A 导航超时 | 日志出现 navigated to .../pending?redirect=... | 应用用了中间跳转页 |
| B Loading 卡住 | 截图长时间空白,DOM 含 loading-pane | React 停在全屏 loading |
| C 选择器失效 | DOM 有内容但目标选择器找不到 | CSS class / DOM 结构变更 |
| D API 报错 | 网络请求 status ≥ 400 | 后端接口返回错误 |
| E 无响应 | 网络请求 status = -1 | API 请求未收到响应 |
| F PageModel 为 Null | 页面对象字段 NPE | 选择器未匹配,注入返回 null |
ai-autofix-e2e-tests/
├── SKILL.md # Claude Code skill 定义(完整 6 步工作流)
├── scripts/
│ ├── parse_trace.py # 解析 trace.zip,输出结构化 JSON 报告
│ └── find_selector.py # 寻找替代选择器并自动修复测试文件
├── docs/
│ └── trace-reference.md # Playwright trace.zip 格式参考
└── evals/
└── evals.json # 评估用例