
e2e Goals详解如何把测试步骤写成自然语言目标【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2ee2e 是一个开源的 AI 端到端测试框架支持 Web 和移动端应用。它的Goals目标驱动测试机制允许你用一句自然语言描述要完成什么由 AI Agent 自主决定点哪里、输什么从而把 e2e 测试步骤写成人类可读的自然语言目标。什么是 e2e 中的 Goals传统 e2e 测试要一步步写点击这个按钮、填入那个输入框页面一改版测试就崩。e2e 的解法是你只说目标模型负责执行路径。核心就是agent.act()这一个方法——给它一个目标goal它自己读屏、决策、操作直到目标达成通过或确认无法达成失败。官方文档对二者的分工有一句精辟的话见 goals.mdx目标内部的流程是模型的事目标的顺序是你的事。 The flow inside a goal is the models job; the order of goals is yours.来看一个真实的完整示例来自 todos.e2e.tstest(todos survive a filter round-trip, async ({ app, agent, screen }) { await app.open(/todos); // 自然语言目标AI 自己找出输入框、按钮、复选框 await agent.act(add todos Buy milk and Walk the dog, complete the first); // 自然语言断言让模型判断屏幕状态 await agent.assert(only one todo remains open); // 精确的 locator 检查不调用模型更快更稳 await screen.getByRole(tab, Done).tap(); await expect(screen.getByTestId(todo)).toHaveCount(1); });注意这段测试里Goals 和 locator 是自由混用的模糊的步骤交给agent.act确切的动作和数值校验交给screen和expect。这正是 e2e 的设计哲学——该智能的地方智能该确定的地方确定。项目自带的示例应用长这样测试就写在 agent.e2e.ts 里如何写好一个 Goal4 条实用技巧1️⃣ 像口头说话一样写指令官方给出的黄金法则把指令写成你会说出口的样子点名界面上可见的东西尽量使用屏幕上的原文措辞。✅ 好的写法await agent.act(complete checkout with the test card); await agent.act(press Greet without typing a name);❌ 避免把多个目标塞进一句话——一次act调用只给一个 goal。2️⃣ 用 params 传测试数据需要动态数据时通过params占位符传入让模型使用你的测试数据await agent.act(invite {email} as an editor, { params: { email: adaexample.test } });3️⃣ 密码等敏感信息用 Secret密码用Secret类型传入模型永远看不到真实值由运行器自己校验字段后填入杜绝泄密const member credentials.user(member); await agent.act(Sign in, { params: { username: member.username, password: member.password }, });4️⃣ 每次运行都变的值用 unique() 包裹如果值每次都不一样比如注册邮箱用unique()包一层这样回放缓存replay cache依然能重放这个步骤省下模型调用费用const email ada${Date.now()}example.test; await agent.act(sign up with email {email}, { params: { email: unique(email) } });多个目标之间共享的术语比如我们管套餐叫 tier不要重复写进每个 goal而是放进 agent 的context详见 agents.mdx。Goal 背后发生了什么一个agent.act步骤内部是一个完整的执行循环实现见 primitives.ts机制讲解见 agent-steps.mdx读屏模型收到脱敏后的屏幕文本快照角色、名称、文本、状态密码字段已打码行动模型从tap、type、press、scroll、navigate等工具中选择操作运行器逐一授权并计数观察每次操作后模型收到屏幕变化循环直到目标达成判词步骤最终以三种结论之一结束——passed成功、failed条件不成立、blocked缺凭据、环境不可用等。框架内置了防呆机制连续 3 次操作失败会要求模型换思路5 次则强制给出结论每个步骤还有调用预算和超时上限不会无限烧钱。验证 Goal 的结果双保险Goal 跑完后用两种方式确认屏幕上的结果方式特点适用场景agent.assert(...)自然语言断言模型判断屏幕状态描述模糊、需要理解expect(screen.getBy...)精确 locator 断言零模型调用确切文本、数量、可见性最佳实践是每个 agent 步骤都配一个不依赖模型的检查两者互补断言稳、回放快、定位问题快。小结把 e2e 测试写成自然语言目标的关键 一次agent.act只给一个目标像说话一样描述用屏幕原文措辞 动态数据走params密码走Secret易变值套unique() 流程顺序由你掌控目标内的操作交给模型✅ 每个 goal 后面跟一个expect精确断言做双保险 通过的act步骤会被 回放缓存 记录下次运行免模型调用省时省钱想动手试试克隆仓库后可以从 examples/ 里的 with-next、with-vite 示例跑起五分钟即可体验 AI 驱动的自然语言 e2e 测试。【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考