从0到1认识e2e:开源AI测试框架的项目结构与代码导读
【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e
e2e 是一个面向 Web 和移动端的开源 AI 端到端测试框架:用一句自然语言描述测试目标,AI Agent 就会驱动应用完成操作,再配合传统的定位器(locators)和断言验证结果。本文带你从 0 到 1 认识这个仓库——不写一行代码,也能看懂它的目录结构、核心包分工和阅读源码的最佳路线。
🧭 e2e 测试框架是什么:先搞懂核心价值
如果你用过传统 E2E 测试(如基于选择器和等待脚本的方案),大概都体会过:UI 一改,测试就坏,修复成本极高。e2e 的解法很直接:
- 目标即测试:用
agent.act('升级工作区到 Pro 套餐')这样一句人话描述步骤,Agent 自己找按钮、点输入框; - AI 与确定性混合:同一条测试里既能写 AI 步骤,也能写
expect(...)精确断言,各取所长; - 缓存省成本:被后续断言验证过的 AI 步骤会被录制下来,下次运行直接回放,不再调用模型,又快又省钱;
- 一份测试,多端运行:同一个测试文件可以跑在 Chromium、iOS 模拟器、Android 模拟器上。
项目入口介绍可以读 README.md,更完整的产品叙事在 docs/index.mdx。
🗂️ 项目结构总览:一个 monorepo 如何分工
e2e 采用 pnpm monorepo 组织,工作区定义见 pnpm-workspace.yaml。顶层目录各司其职:
| 目录 | 角色 | 一句话说明 |
|---|---|---|
packages/ | 📦 发布到 npm 的包 | 核心 SDKe2e+ Web/移动端引擎等 |
apps/ | 🛠️ 内部自研应用 | 测试靶场 + Web/移动端基准套件 |
examples/ | 🚀 可运行的示例项目 | Vite、Next.js、Expo、SwiftUI 各一份 |
docs/ | 📚 官方文档站 | Mintlify 搭建,.mdx即页面 |
skills/ | 🤖 AI 编码代理技能 | 随包发布,e2e init时自动安装 |
一个很妙的设计:apps/不是给用户看的,而是"框架自测"。比如 apps/testbed/ 是一个刻意做满各种刁钻场景(下载、弹窗、iframe、上传)的靶场应用,用来验证 runner 的每个特性;apps/web-benchmark/ 和 apps/mobile-benchmark/ 则收集了 shadow DOM、canvas、原生弹窗等"高难度 UI"场景,作为 AI 能力的考场。
📦 核心包解读:packages/ 里藏着什么
| 包 | 源码位置 | 职责 |
|---|---|---|
e2e | packages/e2e/ | SDK、测试运行器(runner)、CLI,项目的绝对核心 |
@e2e-dev/web | packages/web/ | 浏览器引擎:通过 Playwright 驱动 Chromium / Firefox / WebKit |
@e2e-dev/mobile | packages/mobile/ | 移动端引擎:iOS 模拟器 + Android 模拟器 |
@e2e-dev/github | packages/github/ | 把测试结果以 PR 评论形式回贴的 Reporter |
@e2e-dev/kernel | packages/kernel/ | Kernel 托管浏览器集成 |
@e2e-dev/eas | packages/eas/ | EAS 托管模拟器集成 |
@e2e-dev/decision | packages/decision/ | 有界语义动作/断言的决策模型执行器 |
几个新手容易忽略的细节:
- 契约即代码。项目没有单独的 API 规格文档,公共 API 由构建产物
dist/index.d.ts锁定,线格式(wire format)由 packages/e2e/schema/ 下的 JSON Schema 锁定,每个 schema 都配了一对"合法 + 非法"测试样例。这条规则写在 AGENTS.md 的开头,是读懂全仓的第一把钥匙。 - 引擎是可插拔的。核心包刻意不认识 "browser"、"page" 这些词(
AGENTS.md里明令 grep 零命中),Web 和移动端引擎都通过公开的e2e/engine契约接入,理论上任何人都可以自己写一个引擎。
🔍 代码导读:runner、agent 与 engine 三大模块
如果你愿意打开源码,packages/e2e/src/ 下的目录名就是最好的导读地图:
src/run/—— 运行器核心:调度器、并发 worker、重试、会话管理。测试"怎么跑起来"都在这里;src/agent/—— AI Agent 本体:act.ts 负责"干活"(完成目标),配套的 judgment 方法负责"看屏幕"(断言、等待、提取),step-cache.ts 实现"验证过的步骤下次回放"的缓存机制,详见 docs/cache.mdx;src/locator/—— 定位器引擎,把getByRole这类查询编译成 AST 再执行;src/expect/—— 断言体系,带自动重试的轮询式expect;src/oauth/—— 各家模型订阅的登录/取 token 流程,npx e2e login命令就出自这里。
想理解"AI 到底如何一步步操作",建议从 packages/e2e/src/agent/index.ts 入手,顺藤摸到 executor 和 prompts,比从 runner 入手更贴近"AI 测试"这个主题。
🚀 示例项目:examples/ 从 0 到 1 跑通第一个测试
想快速建立"它能跑起来"的信心,examples/ 是最佳起点——四个开箱即用的完整项目,各配一份确定性测试和一份 AI 测试:
| 示例 | 技术栈 | 说明 |
|---|---|---|
| with-vite/ | Vite + React | 最轻量的起步 |
| with-next/ | Next.js | 服务端渲染场景 |
| with-expo/ | Expo (React Native) | Android / iOS |
| with-swiftui/ | SwiftUI | 原生 iOS |
以 Next.js 示例为例,配置只有十几个字:声明 Agent 用哪个模型、目标 URL 和启动命令,见 e2e.config.ts。而 AI 测试长这样(节选自 agent.e2e.ts):
// Agent 自己判断该填哪个输入框、点哪个按钮 await agent.act('get the app to greet {name}', { params: { name: 'Grace' } }); // 每一步 AI 操作,都配一个不依赖模型的确定性检查 await expect(screen.getByRole('status')).toHaveText('Hello, Grace!');对照着看界面就一目了然——这正是示例应用跑起来后的样子:
纯确定性的对照测试在同目录的 greeting.e2e.ts,两个文件并读,就能体会"AI 步骤 + 精确断言"的组合思路。
📚 官方文档与进阶入口
docs/目录是 Mintlify 文档站的源码,每个.mdx就是一个页面,新手建议按这个顺序读:
- docs/quickstart.mdx —— 一条命令
npx e2e init完成初始化,最省事的入门; - docs/goals.mdx —— 如何用自然语言写测试步骤(AI 测试的灵魂);
- docs/locators.mdx —— 定位器查询语法,确定性测试的基础;
- docs/agents.mdx 与 docs/models.mdx —— Agent 配置与模型选型;
- docs/debugging.mdx —— 报告与调试,测试失败时看什么。
另外,skills/e2e/SKILL.md 是官方发布的"AI 编码代理技能"——把它交给 Claude Code、Cursor 等工具后,"帮我加一个结账流程测试"这类指令就能直接执行,这是 e2e 与 AI 工作流结合的一个亮点。
🎯 新手导读路线:3 步读完这个项目
- 第 1 步(10 分钟):读 README.md + docs/quickstart.mdx,在
examples/with-vite/里跑通第一个测试,建立整体印象; - 第 2 步(1 小时):对照本文的目录分工表,浏览
packages/e2e/src/的目录名和文件头注释,重点精读src/agent/,理解"目标 → 观察 → 行动 → 断言"的循环; - 第 3 步(进阶):翻开 AGENTS.md 和 CONTRIBUTING.md,了解契约锁定方式、安全不变量和基准测试方法——这份文档本身就是理解该项目工程文化的最好材料。
写在最后:e2e 把"AI 的灵活"与"断言的确定"装进了同一个测试文件,再用回放缓存把成本压到最低。从examples/跑起,沿着packages/e2e/src/读下去,你会发现一个 AI 测试框架的骨架其实和传统 runner 并无二致——变化的只是屏幕另一端,多了一位会看屏幕的 Agent。🚀
【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考