• 自动化框架: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           # 评估用例

感兴趣的小伙伴,点击此开源地址