OpenClaw · Playwright sharding · flake · 遠端 Mac · 二〇二六
2026 OpenClaw 前端實戰:
遠端 Mac 編排 Playwright 分片、聚合報告、flake 閾值與 PR 可讀摘要
2026.04.24
前端 QA/E2E 自動化
約 10 分鐘閱讀
對象:遠端 Mac 上跑雙引擎並將 Playwright sharding 納入 CI 的前端 QA。結論:分片只切工作,OpenClaw閘道讀多份報告、控 flake、產 PR 摘要;邊界畫清才擴縮穩。與單測矩陣文不同,本文專寫 E2E 分片與合併。延伸 Token 摘要、Deployments、Vitest 矩陣、Docker。💻
痛點:合併計數漂移;retries 無上限誤判品質;閘道越權改測試難審計。
| 項目 | 建議由 Runner/Playwright 做 | 建議由 OpenClaw 閘道做 |
|---|---|---|
| 案例分派 | --shard 與專案內 grep 規則 |
校驗每片皆上傳完整 json |
| 不穩定 | 本機與 CI 相同瀏覽器版本鎖檔 | flake 比率閾值、熔斷訊息 |
| 可讀輸出 | HTML 報告與 trace.zip | 四行 PR 摘要+失敗檔案路徑表 |
01 分片參數表
下列變數寫入遠端 Mac Job 模板,避免本機與 CI 分片索引錯線。
| 鍵/旗標 | 用途 | 備註 |
|---|---|---|
--shard=2/5 |
第 2 片共 5 片 | 與矩陣維度一致時才與專案數對齊 |
--workers=1 |
分片內序列化 | 降低螢幕錄影與 GPU 競態 flake |
PLAYWRIGHT_HTML_OUTPUT_DIR |
每片獨立 HTML | 建議含索引於路徑名 |
--reporter=json,junit |
供閘道機讀合併 | junit 給趨勢儀表板 |
02 報告目錄約定
約定目錄可讓合併腳本與 OpenClaw 插件互不猜路徑。
- 工件根:
artifacts/e2e/${GIT_SHA}/shard-${INDEX}/。 - 每片必含
report.json、results.xml、可選trace.zip。 - 合併輸出:
artifacts/e2e/${GIT_SHA}/merged/summary.json與同層README.pr.md。 - 閘道只讀 merged,不回寫各分片原始夾,避免競態覆寫。
- 與追蹤摘要流程並行時,參考 trace/HAR 摘要文 另開子目錄。
03 OpenClaw 調用邊界
04 重試閾值公式示例
以「每分片案例數」設硬頂,避免無限重試拖垮遠端 Mac 池。
每分片重試上限 = floor(0.15 × cases_per_shard) + 2
全工作流 flake 停損 = min(8, ceil(0.05 × total_cases))
說明:第一式控單片噪音,第二式控整 PR 再驗證次數;超標摘要提示人工看 trace。
可引用資訊
- 分片計數以
report.json內統計為準, junit 僅輔助。 - 冪等鍵建議:
${GIT_SHA}:${WORKFLOW}:${SHARD_TOTAL}。 - 遠端 Mac 上
webkit建議單 worker 以降低視窗合成 flake。
05 常見超時排障
| 徵兆 | 優先檢查 | 動作 |
|---|---|---|
| 單測固定秒數失敗 | test.setTimeout 與 hook 總量 |
拆 hook 或標記慢測另片 |
| 僅 webkit 偶發 | 首屏資源與字型載入 | 提高斷言前 expect 逾時並錄影比對 |
| 整片逾 wall clock | Runner CPU 配額與錄影解析度 | 關閉不必要 trace 或降幀 |
若逾時集中於部署後首跑,請與 部署 Hook 冒煙 的暖站步驟併讀。
06 可複現五步(主線)
- 在矩陣宣告
shardIndex與shardTotal,與 Playwright 旗標同步。 - 每 Job 結束無論成敗上傳
shard-*目錄為單一 zip。 - 下載全片後於閘道執行合併:加總、去重 flaky id、寫
merged。 - 套用上一節公式;觸發熔斷則只回傳摘要與連結,不觸發全庫重跑。
- 以四行格式回傳 PR:狀態、耗時、失敗檔、後續動作;鍵值與 Deployments 文 對齊。
決策摘要
分片參數表鎖線、目錄約定鎖合併、閘道只做摘要與閾值、flake 有公式即預算可估。要與 CI 同構預演,請租用Apple Silicon 遠端 Mac做雙引擎長時分片。