
e2e报告生成源码导读list、markdown与JUnit如何产出【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2ee2e 是一个面向 Web 与移动端的新一代e2e 测试框架内置了list、markdown、JUnit三种报告产出格式终端里实时滚动的 list 报告、可直接贴进 Pull Request 的 markdown 报告以及供 CI 平台摘要使用的 JUnit XML。本文带你读完 packages/e2e/src/report/ 目录下的核心源码弄懂每种报告从哪来、怎么写、写在哪。报告体系总览4 个内置 Reporter1 份契约所有内置报告器集中注册在一个常量里配置解析器、CLI 和 runner 都以它为唯一事实来源避免三处漂移export const BUILTIN_REPORTERS [list, json, junit, markdown] as const见 builtin.ts#L14。这个设计保证配置里能写的 id和实际存在的报告器永远一致——漏注册会在编译期直接报错。它们都实现同一个Reporter契约types.ts#L1396-L1403只有两个钩子钩子作用谁实现onEvent(event)运行中逐条消费运行事件实时渲染仅listonRunFinished(run, signal)报告落盘后一次性渲染可返回汇总行json、junit、markdown两条重要约定报告器永远不能改变运行状态或退出码——它坏了只是一行 stderr 警告onRunFinished带 1 分钟预算超时的signal会中止它发起的请求。 一句话记忆list 是直播json/junit/markdown 是录像回放——后三者都只读最终的report.json文档wire 格式report-1由 report-v1.schema.json 锁定不触碰 runner 的实时状态。list 报告事件流驱动的终端实时渲染list是唯一带状态的报告器由 runner 每次运行单独构造builtin.ts#L19-L23。核心类ListReporterlist.ts#L224是一个事件汇handle方法按switch分发十几种事件run-started、plan、test-started、step、test-finished……它最终呈现四段内容文件块每个测试文件 × 目标一行徽章行文件内所有测试跑完后整体打印含各测试行与嵌套的 agent 步骤Failed Tests 区红底横幅 每个失败案例的错误码、首行错误、代码帧code frame、失败截图/视频与 trace 页路径Run Errors 区运行级错误如服务起不来单独成区对齐汇总Test Files / Tests / AI 用量 / Cache / Duration 等行。在交互式终端TTY上它还会渲染一个实时窗口下方固定区域显示正在运行的测试树和计数器日志往上流在非 TTY 的 CI 日志里则退化为纯流式输出——每步完成即打印保证日志里每个名字恰好出现一次。markdown 报告把 report.json 渲染成 PR 评论页markdownReportermarkdown.ts#L568-L578在onRunFinished里把整份 report-1 文档交给renderMarkdownReportmarkdown.ts#L516渲染成单页 markdown写入report.json同级的summary.md。页面布局按读者先看什么排序标题行/ 状态图标 通过/失败计数下方一行花费agent 步骤数、缓存回放数、token、成本运行级错误每条引用块一行失败块每个失败测试一段——出错在第几步、错误与 agent 的原话引用、预期/实际事实列表、证据截图/视频与 trace 页链接折叠区flaky 测试与全部测试表格都收在details里绿色运行时几乎无事可读。为适配 GitHub 评论的 65536 字符上限源码设了硬性预算markdown.ts#L81-L90正文 ≤ 60000 字符、失败块最多 30 个、运行错误最多 20 条、测试行最多 400 行超出则用贪心裁剪并注明完整报告见report.json。 配合 e2e-dev/github 包这份 markdown 还能自动作为评论贴到 Pull Request 上。JUnit 报告为 CI 测试摘要而生的 XMLjunitReporterjunit.ts#L216输出junit.xml结构与 CI 摘要工具完美对齐一个测试文件 一个testsuite一个测试 × 目标组合 一个testcaserenderJunitReport运行级错误单独成run套件像APP_UNREACHABLE这种没跑成测试的失败在 CI 里也直接可见状态映射flaky 记为通过并附system-out说明先失败了 N 次skipped/interrupted都映射为skipped断言类错误用failure其余如超时、模型不可用用errorXML 安全所有文本先做实体转义XML 1.0 禁止的控制字符替换为UFFFD避免一个坏字符让解析器拒绝整份文档junit.ts#L29-L44。报告写到哪里.e2e 目录布局与原子落盘三个文件型报告器共用一个工厂函数 fileReporter它把渲染结果写到report.json所在目录的同级文件并返回一行标签 相对路径打印在终端汇总下方。写入走原子写先写临时文件再替换父目录缺失时自动创建。默认输出目录是项目根下的.e2etypes.ts#L1443-L1453一次运行后长这样.e2e/ ├── report.json # 报告真身report-1 文档 ├── junit.xml # junit 报告器产出 ├── summary.md # markdown 报告器产出 ├── ai-trace.json # 可选--ai-trace ├── results/ # 每个测试一个目录含 trace.md 与截图 └── artifacts/ # 每次运行开始即清空json报告器则不落盘直接把 report-1 文档打到 stdout方便脚本管道处理。如何配置与选择报告格式在e2e.config.ts的reporters字段里按 id 勾选即可详见 docs/reference/reporters.mdxexport default { targets: [/* ... */], reporters: [list, markdown, junit], };默认是list加入json会顶替list终端只出 JSONmarkdown/junit则与list并存也可以塞入自定义Reporter对象它始终运行、不会被--reporter移除。官方示例项目 examples/with-next/ 展示了从配置到跑通的完整流程可作为你接入报告体系的参照。源码地图快速定位关键文件关心什么看哪里报告器注册表与 id 约束builtin.tslist 实时渲染与失败区list.tsmarkdown 页面渲染与字符预算markdown.tsJUnit XML 结构与转义junit.ts报告器契约Reporter/FinishedRuntypes.ts#L1348-L1403原子落盘工厂fileReporterwrite.tsreport-1 数据契约report-v1.schema.json读代码的建议路径先读Reporter契约 → 再看fileReporter这条最短的落盘链路 → 然后任选junit.ts约 210 行最能体现从文档到产物的全过程→ 最后回到list.ts感受事件流渲染的完整度。【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考