shortest
用自然语言写 E2E 测试,AI 自动操作浏览器完成端到端验证
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言写 E2E 测试,AI 自动操作浏览器完成端到端验证
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:凌晨两点,你正准备发布新版本,CI 跑了一套端到端(E2E)测试——然后它失败了。错误日志只写着"按钮点击失败",没有任何上下文,你对着屏幕发呆,不知道是测试写错了,还是真的 Bug,又或者是测试环境抽风。传统 E2E 测试就是这样:写用例麻烦、维护成本高、一出问题就成"玄学"。而 Shortest 想做的事,正是用自然语言彻底解决这个问题——你只需要告诉 AI"登录,然后点击提交按钮",剩下的它来完成。
Shortest 是由 antiwork 团队开发的开源 E2E 测试框架,于 2024 年 9 月正式发布。它将自然语言处理能力引入端到端测试领域,核心思路是:用日常语言描述测试步骤,AI 自动将其转化为 Playwright 操作并在真实浏览器中执行。项目由 @m candidates 等核心贡献者维护,采用 MIT 许可证,开源不到一年已积累超过 5600 颗 GitHub Star,增长速度在同类型测试工具中处于领先位置。
从技术选型看,Shortest 底层基于 Playwright(微软开源的浏览器自动化框架),AI 层接入 Claude(Anthropic)和 OpenAI 的模型,通过 @ai-sdk 抽象层实现多模型支持。这种"AI + 浏览器自动化"的组合,让它在处理动态表单、复杂交互和异步操作时,比传统脚本式测试工具更有优势。
传统的 E2E 测试需要工程师先掌握测试框架语法(比如 Playwright 的 page.click()、Cypress 的 cy.get()),再编写大量选择器查找代码,最后才能写出有意义的测试用例。这个过程枯燥且容易出错——一旦 UI 改版,选择器失效,测试用例成片崩溃,维护成本极高。
Shortest 的思路是反过来的:你用自然语言描述你想测试的场景,AI 理解意图后自动决定操作步骤、选择元素、执行断言。比如:
import { shortest } from "@antiwork/shortest";
shortest("Login to the app using email and password", {
username: process.env.GITHUB_USERNAME,
password: process.env.GITHUB_PASSWORD,
});
就这么几行代码,AI 会自动打开浏览器、导航到登录页、填写用户名密码、点击登录按钮,并等待页面响应。如果中途出错,AI 还能尝试自我修正(self-healing),自动修复失效的选择器。这对于快速迭代的产品团队来说,大幅降低了测试的门槛——产品经理也可以写测试了。
项目还支持回调函数(.after()),在 AI 执行完浏览器操作后,开发者可以介入添加自定义断言或数据库校验:
shortest("Login to the app using username and password", {
username: process.env.USERNAME,
password: process.env.PASSWORD,
}).after(async ({ page }) => {
const user = await db.select().from(users).where(eq(users.email, process.env.USERNAME));
expect(user.length).toBe(1);
});
这种"AI 执行 + 人工校验"的混合模式,兼顾了效率与可靠性。
Shortest 采用 pnpm monorepo 结构,核心代码在 packages/shortest 子包中,Web UI(Dashboard)基于 Next.js 14 构建,使用了 Clerk 做身份认证、Radix UI 组件库和 Tailwind CSS。项目采用 TypeScript 编写全栈代码,数据库层使用 Drizzle ORM 连接 PostgreSQL。
整体架构分为三层:
第一层:用户界面层(Next.js Dashboard) —— 提供测试报告可视化、GitHub PR 集成状态展示等功能。用户可以在 Web UI 中查看 AI 生成的测试执行记录、错误截图和重试历史。
第二层:测试执行层(packages/shortest) —— 这是框架的核心,接收自然语言描述和上下文参数,通过 AI 模型生成 Playwright 操作序列,在真实浏览器中执行。内置 AI 模型选择(Claude / OpenAI)、重试策略、超时控制等机制。
第三层:集成层(GitHub App / Mailosaur) —— 支持将测试嵌入 GitHub PR 工作流,提供 PR 评论式反馈(类似 Codecov 的体验);Mailosaur 集成用于邮件类测试场景(注册验证、密码重置等)。
值得注意的是,项目在 monorepo 根目录包含 shortest.yml 配置文件,参考了 GitHub Actions 的工作流设计,未来可能会原生支持 CI 集成。
Shortest 提供了 npx @antiwork/shortest init 命令,可以一键初始化项目配置:
@antiwork/shortest 为开发依赖shortest.config.ts 配置文件.env.local 中填入 API Key 占位符.gitignore配置文件支持指定基础 URL(baseUrl)、测试文件匹配模式(testPattern)、浏览器选项(browser.contextOptions)以及 AI Provider 配置。配置采用 TypeScript 类型安全定义,通过 satisfies ShortestConfig 编译时检查。
初始化后,只需要在 app/**/*.test.ts 目录下创建测试文件,用自然语言描述测试场景即可运行。
Shortest 特别适合以下场景:
但它也有明显的局限:
Shortest 的出现代表了一种新趋势:AI 原生的测试工具。它不是把 AI 当作辅助工具叠加在传统框架上,而是将 AI 作为测试执行的核心引擎,让测试用例的编写方式发生了根本性变化。
从行业角度看,2024 年以来"AI + Testing"的结合正在加速——从 Diffblue 的 AI 生成单元测试,到 MagicPod 的云端 AI 视觉测试,再到 Shortest 的自然语言 E2E,不同技术路线都在探索如何用 AI 降低测试成本、提升测试智能化水平。Shortest 的独特价值在于它抓住了 E2E 测试中"选择器维护"这个最大的痛点,用 AI 的自我修复能力来解决,而不是试图完全替代人工。
GitHub 上 5600+ Star、337 个 Fork 的数据表明,这个方向确实击中了开发者的需求。随着 Claude 4、GPT-5 等更强推理模型的普及,AI 测试工具的执行稳定性和智能化程度还将进一步提升。