2026 OpenClaw 前端实战:
远程 Mac 聚合 JUnit XML、trace 附件索引与 stderr 片段,生成单一 PR 门禁摘要并回传
Playwright在远程 Mac跑完后,评审真正需要的是一条可审计的 PR 门禁摘要:合并各 job 的JUnit XML、附上trace 附件索引(路径与体积,不塞整包)、再抽stderr 片段对齐失败用例。本文按 HowTo 给出报告路径约定、阈值策略、网关侧模板与失败重试四段 H2,并附可执行脚本骨架;编排级细节可与分片聚合文、Trace 与 HAR 最小复现文交叉阅读。公开博客列表、首页、购买页均免登录可达。
痛点拆解
- 多份 XML 噪声。每片各一份 junit,评审无法一眼看全局通过失败跳过。
- trace 体积爆 Hook。把 zip 打进 Webhook 正文易超时且泄露路径习惯。
- stderr 淹没信号。全量日志贴 PR 不可读,缺与失败用例绑定的短片段。
序 门禁形态对照(决策矩阵)
| 维度 | 多文件直贴 PR | 合并加 OpenClaw 单行摘要 |
|---|---|---|
| 可读性 | 长串附件名易刷屏 | 首行结论加折叠块 |
| 审计 | 难对齐 flake 口径 | summary.json 固定字段 |
| 带宽 | 易重复传大对象 | 索引指针加制品链 |
壹 报告路径约定
统一写在仓库根相对路径,CI与远程 Mac同一环境变量:artifacts/e2e/junit/shard-{n}/results.xml、artifacts/e2e/traces/、artifacts/e2e/merged/summary.json。旁路落 run_meta.json 记 Playwright 版本、短 SHA、项目名,勿写密钥。
HowTo:落地五步
- 打开 junit reporter 并锁输出目录到 artifacts。
- 分片或矩阵每 job 写独立子目录,merge 阶段读全子树。
- 生成 merged/results.xml 与 summary.json 两文件供机读。
- 扫描 trace 写出 trace_index.json,仅列路径与字节。
- 从日志截取失败用例邻近行写入 stderr_snippets.json。
merge 脚本入口与 npm 脚本名在 README 与 Runbook 同字符串,避免本地远程命令分叉。
贰 阈值策略
在 summary.json 固定数值字段:fail_hard 任一非零即门禁红;flake_budget 超历史分位仅黄提醒;slow_top_n 毫秒表超阈单列不挡合并。表内系数写版本号,拒绝口头约定。
| 字段 | 建议阈 | 门禁动作 |
|---|---|---|
| failed | 零为绿 | 非零红并附用例表 |
| skipped | 小于总数百二 | 超阈黄需说明 |
| stderr 行数 | 每用例八十行内 | 截断写省略标记 |
叁 网关侧模板
OpenClaw只拼短 Markdown:首行 状态 加计数三元组;第二行起折叠块内嵌失败用例表、trace 索引前三条、stderr 映射一行一案。模板槽位名与 summary.json 键同名,减少网关分支。
# 伪代码:合并后一键产出并 POST(正文仅 JSON 路径)
node scripts/merge-junit-xml.mjs \
--inputs "artifacts/e2e/junit/shard-*/results.xml" \
--out-xml artifacts/e2e/merged/results.xml \
--out-json artifacts/e2e/merged/summary.json
node scripts/build-trace-index.mjs --traces artifacts/e2e/traces --out artifacts/e2e/merged/trace_index.json
node scripts/extract-stderr-snippets.mjs --log ci.log --junit artifacts/e2e/merged/results.xml
node scripts/openclaw-post-pr-summary.mjs --template gateway/pr_gate.md --idempotency "${SHA}-e2e"
幂等键格式 仓库小写斜杠短 SHA 横杠门禁名;模板文件放 .openclaw/templates/ 与代码同审。
肆 失败重试
评论 API 遇 429 或网关 5xx:固定最大五次、底退避二百毫秒乘二的上限三十秒,抖动十秒内随机。同 PR 只更新带相同 HTML 注释锚点的块,避免刷屏。跑测侧 Playwright 重试仍由项目配置承担,与评论重试分层计数。
- 可观测。每次重试打结构化一行含 attempt 与 status。
- 熔断。连续两次体解析失败则只写本地 summary 不落评论。
- 对表。重试计数写入 summary.json 供后续周报。
把JUnit 合并、trace 索引、stderr 剪辑固化成脚本与路径约定后,单一 PR 摘要才能在远程 Mac与云上 reproducible。需要Apple Silicon 真机常驻跑门禁时,从首页看算力说明,进购买页选套餐,再回到博客对照分片与 Trace 文补齐整条链路。
更多文章:博客列表。