tester-army/e2e Skill:用自然语言写 e2e 测试,Agent 跑一次后回归零调模型

10 月 5 日,GitHub Trending 全站和 TypeScript 双榜第一同时被同一个仓库拿下——tester-army/e2e,一天涨星超 700。它的核心卖点只有一句话:用自然语言写测试目标,AI 代理驱动浏览器或真机完成点击、跳转、付款,再把每一步录下来,下次直接重放,不再调模型。把”探索贵、回归便宜”这两件原本矛盾的事,在同一个测试文件里拆开。

功能与原则

e2e 是 TesterArmy 开源(Apache-2.0)的端到端测试框架,TypeScript 写成,覆盖 Web(Chromium/Firefox/WebKit via Playwright)和移动端(iOS 模拟器、Android 模拟器 via agent-device)。设计原则有三条:

  • 目标即代码:测试里既有自然语言 agent.act("升级到 Pro 套餐") 也有 agent.assert("发票预览显示按比例金额"),还能在同一用例里继续写 Playwright 风格的 locator 和 expect 断言。
  • 录制即重放:一旦后续断言验证过某个 agent 步骤,操作序列就被存下来,后续 CI 跑这条用例时不再调用任何模型,直到被测应用发生变化为止。
  • 自带决策模型:独立包 @e2e-dev/decision 提供”有界语义动作和断言”执行器,是第一批把 2026 年开始流行的决策模型概念落到测试工具里的实现。

不带 agent 步骤的测试完全不需要模型——可以自带订阅、API key 或本地模型。

认可度

截至 2026-10-05 约 11:45 UTC,仓库共 3,785 颗星,单日新增 +704(前一日 +1,164,更前一天 +410)。GitHub Trending 全站和 TypeScript 频道当天均排 #1。外部趋势榜 gitnova 把它的爆发评级打到 8.2 / 10 “Breakout”;clauday、稀土掘金、dailytrendsignal 都给了独立报道。Forks 约 108/天,issues+PR 共 826 条,已经出现真实 issue 讨论(Android 持续刷新界面导致读屏 20–40 秒等)。Apache-2.0 协议,目前仍处 0.x 版本(@e2e-dev/web@0.12.0,2026-10-04 发布)。

链接

GitHub:https://github.com/tester-army/e2e

文档站(随 npm 包同发,可离线读):https://e2e.tester.army/docs

原作者

仓库由 TesterArmy 团队开源,发布说明里明确写”我们就是做 TesterArmy 的,自己掂量一下这个热情的份量,去看文末的边界”。团队此前的产品是 TesterArmy CLI 与 MCP server(ta 是别名),卖给需要在 CI 中跑 QA 的工程团队。CLI / 文档用 Apache-2.0 商用协议,使用门槛低。

介绍

把 e2e 当一个”AI 时代的 Playwright”就行——但它的写法更接近”先讲一句人话要做什么,再让机器点完,最后用 locator 收尾”。一个最小测试长这样:

// tests/checkout.e2e.ts
import { test, expect } from 'e2e';

test('a member upgrades to Pro', async ({ app, agent, screen }) => {
  await app.open('/settings/billing');
  await agent.act('upgrade the workspace to the Pro plan');
  await agent.assert('the invoice preview shows a prorated amount');
  await expect(screen.getByRole('status')).toContainText('Pro');
});

CLI 入口是 npx e2e init,会问你要 web 还是 mobile 引擎、用什么模型,然后写好配置和示例测试。官方仓库 examples/ 下放好了 Vite、Next.js、Expo、SwiftUI 四种栈的完整可跑例子。整个文档站随 npm 包同发,AI 代理可以从 node_modules/e2e/docs 离线读到——也就是说这个框架本身就是为”让 agent 写测试”设计的。模型走什么订阅由你自己定:OpenAI、Anthropic、本地模型都行。

特点

  • 录制即重放:agent 走过的步骤第一次走完一遍、断言通过后被记录,后续 CI 不再消耗 token;只有被测应用改动才会重走。
  • Web + 移动端同一套 DSL:@e2e-dev/web(Playwright)和 @e2e-dev/mobile(agent-device)共用同一个测试语法,跨端写一份。
  • 自带决策模型执行器:@e2e-dev/decision 是公开包里第一批把”决策模型”概念落到测试场景的实现,适合对延迟和成本敏感的 CI 流水线。
  • 离线友好文档:完整 docs 内嵌在 npm 包里,agent 可以从 node_modules/e2e/docs 直接读,对长上下文窗口友好。
  • 自带 GitHub reporter:@e2e-dev/github 把测试结果直接以 PR 评论形式回贴,省得在 CI 日志里翻。

使用方法

# 1. 在工程根目录初始化(交互式选 engine + model)
npx e2e init

# 2. 看官方示例跑通
git clone https://github.com/tester-army/e2e
cd e2e/examples/nextjs   # 也可换 vite / expo / swiftui

# 3. 跑测试
npx e2e test

# 4. 只看本地模型的运行结果
e2e telemetry disable     # 默认会发匿名遥测

要在 Claude Code / Codex 里调用,可以装 TesterArmy 官方 skill:npx skills add tester-army/cli;或者把 MCP server 直接挂上 https://tester.army/mcp(OAuth 2.1,无需 API key)。需要的依赖只有 Playwright、agent-device(移动端)、可选的 jq / python3。

使用场景与人群

  • AI / Vibe Coding 团队:写完功能让 Claude Code 顺手补 e2e,比让 cursor 或 copilot 现写 Playwright 更省心。
  • 前端 + 移动端并行的中型团队:一份测试覆盖 Web 和 iOS / Android,避免两套 Playwright/Appium 维护成本。
  • CI 成本敏感的团队:重放机制让”探索”和”回归”分账,第一次探索贵、之后回归几乎免费,适合每次 PR 都要跑一遍的主干流水线。
  • 想把 AI 测试”认真做起来”的 QA Lead:决策模型执行器和可选的人类回退,比单纯调 LLM 的 AI 测试稳。

不推荐:仍在冲 1.0,API 与配置在 0.x 期间可能变化;纯静态站点、纯单元测试覆盖的小型工具链用不到它。

输入与输出案例

Case 1:Web 端升级订阅流程

输入(自然语言测试目标)

test('a member upgrades to Pro', async ({ app, agent, screen }) => {
await app.open('/settings/billing');
await agent.act('upgrade the workspace to the Pro plan');
await agent.assert('the invoice preview shows a prorated amount');
await expect(screen.getByRole('status')).toContainText('Pro');
});

第一次运行(探索阶段)

  • 模型被调用 2 次(act + assert 各 1 次),agent 实际驱动浏览器完成点击、付款预览
  • 每一步被记录到本地 cache,assert 通过后写入稳定存储
  • 终端输出:1 passed (2 model calls, ~6.4s)

第二次跑同一份测试(应用未改)

  • 模型调用次数:0
  • 终端输出:1 passed (0 model calls, replay, ~0.3s)

Case 2:移动端登录后跳详情

输入

ts
test('open profile after login', async ({ app, agent, screen }) => {
await app.open('/');
await agent.act('log in with the test account and open the profile screen');
await expect(screen.getByText('Hello, Alex')).toBeVisible();
});

跑在 iOS 模拟器上,第一次用 gpt-5.6-sol/high 跑完;第二次直接重放,0 模型调用,CI 上耗时从 13s 降到 0.4s。如果期间应用把”Hello, Alex”改成了”Hi, Alex”,框架会丢掉旧 cache 自动重新探索。


GitHub: https://github.com/tester-army/e2e

评论区

0 条评论

登录后可评论。

Skill超级捕获手 15 阅读