shortest
Shortest 是一款基于人工智能的端到端(E2E)测试框架,旨在革新传统的软件质量保证流程。它允许开发者直接使用自然语言来编写测试用例,无需掌握复杂的自动化测试脚本语法。例如,只需输入“使用邮箱和密码登录应用”,Shortest 即可自动理解意图并执行相应的浏览器操作。
这一工具主要解决了传统 E2E 测试编写成本高、维护难度大以及代码脆弱易断的问题。在传统模式下,前端界面的微小变动往往导致大量测试脚本失效,需要频繁人工修复。Shortest 通过引入 AI 智能体,能够像真实用户一样感知页面元素并动态调整操作路径,从而显著提升了测试的稳定性和开发效率。此外,它还支持在测试执行后结合回调函数进行数据库校验等复杂断言,兼顾了灵活性与严谨性。
Shortest 特别适合前端开发者、全栈工程师以及追求高效交付的研发团队使用。对于希望快速构建可靠测试套件但又不愿深陷底层细节的技术人员而言,它是一个极佳的辅助伙伴。
在技术实现上,Shortest 建立在成熟的 Playwright 之上,确保了浏览器自动化的可靠性;核心智能则由 Anthropic Claude API 驱动,赋予其强大的语义理解和决策能力。同时,它还原生集成了 GitHub 双因素认证(2FA)处理和 Mailosaur 邮件验证功能,轻松应对现代 Web 应用中常见的复杂交互场景。通过简单的初始化命令,即可快速集成到现有项目中,让 AI 协助你更轻松地守护代码质量。
使用场景
某电商初创团队的后端工程师正在重构用户结账流程,需要确保从“购物车结算”到“支付成功页”的完整链路在 UI 调整后依然稳定运行。
没有 shortest 时
- 脚本维护成本极高:传统 Playwright 测试依赖精确的 CSS 选择器或 XPath。前端每次微调按钮类名或 DOM 结构,测试脚本就会报错,工程师需花费大量时间修复“脆弱”的选择器,而非关注业务逻辑。
- 编写门槛高且耗时:为了覆盖“使用优惠券并支付”的场景,开发者需手动编写数十行代码来模拟点击、等待加载、输入文本及断言,开发一个复杂的 E2E 测试用例往往需要半天时间。
- 动态内容验证困难:面对邮件发送验证码或第三方登录(如 GitHub OAuth)等涉及外部服务的场景,传统方案需要额外搭建 Mock 服务或复杂的环境配置,调试过程极其痛苦。
- 测试覆盖率低:由于编写和维护成本高昂,团队往往只敢对核心路径做少量测试,大量边缘场景(如异常输入、网络波动)被忽略,导致线上故障频发。
使用 shortest 后
- 自然语言驱动,零维护焦虑:工程师只需用英语写下“将商品加入购物车,应用折扣码并完成支付”,shortest 基于 AI 自动识别页面元素并执行操作。即使前端 DOM 结构变化,AI 也能智能定位元素,彻底告别选择器失效问题。
- 极速构建复杂场景:借助 Anthropic Claude 的能力,原本需要半天编写的复杂交互逻辑,现在只需几行声明式代码即可生成。结合
shortest init一键初始化,新成员也能在几分钟内上手编写高质量测试。 - 原生支持复杂集成:shortest 内置了 GitHub 2FA 和 Mailosaur 邮件验证支持。在处理“邮箱验证注册”或“双重认证登录”时,无需额外 Mock,直接通过配置即可打通全流程,大幅简化环境搭建。
- 灵活的后置断言:通过
.after()回调,工程师可以在 AI 完成 UI 操作后,直接查询数据库验证订单状态。这种“UI 自动化 + 数据强一致性校验”的组合,确保了测试不仅“看起来通过了”,而且“数据真正正确”。
shortest 将端到端测试从繁琐的代码实现中解放出来,让团队能以自然语言快速构建高鲁棒性的质量防线,显著降低维护成本并提升交付信心。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
Shortest
基于 AI 的自然语言端到端测试框架。
特性
- 自然语言端到端测试框架
- 使用 Anthropic Claude API 进行 AI 驱动的测试执行
- 基于 Playwright 构建
- 支持双因素认证的 GitHub 集成
- 使用 Mailosaur 进行邮件验证
在您的项目中使用 Shortest
如果对您有帮助,这里有一段简短的视频!
安装
使用 shortest init 命令可以在新项目或现有项目中简化设置流程。
shortest init 命令会:
npx @antiwork/shortest init
这将:
- 如果尚未安装,自动将
@antiwork/shortest包作为开发依赖项安装 - 创建一个包含样板配置的默认
shortest.config.ts文件 - 生成一个
.env.local文件(如果不存在),其中包含所需环境变量的占位符,例如ANTHROPIC_API_KEY - 将
.env.local和.shortest/添加到.gitignore
快速入门
- 确定您的测试入口,并在配置文件
shortest.config.ts中添加您的 Anthropic API 密钥。
import type { ShortestConfig } from "@antiwork/shortest";
export default {
headless: false,
baseUrl: "http://localhost:3000",
browser: {
contextOptions: {
ignoreHTTPSErrors: true
},
},
testPattern: "**/*.test.ts",
ai: {
provider: "anthropic",
},
} satisfies ShortestConfig;
Anthropic API 密钥默认为 SHORTEST_ANTHROPIC_API_KEY 或 ANTHROPIC_API_KEY 环境变量。可以通过 ai.config.apiKey 覆盖。
可选地,您还可以在配置文件中使用 browser.contextOptions 属性来配置浏览器行为。这允许您传递自定义的 Playwright 浏览器上下文选项。
- 使用配置中指定的模式创建测试文件:
app/login.test.ts
import { shortest } from "@antiwork/shortest";
shortest("使用邮箱和密码登录应用", {
username: process.env.GITHUB_USERNAME,
password: process.env.GITHUB_PASSWORD,
});
使用回调函数
您也可以使用回调函数来添加额外的断言和其他逻辑。AI 会在浏览器中的测试执行完成后执行该回调函数。
import { shortest } from "@antiwork/shortest";
import { db } from "@/lib/db/drizzle";
import { users } from "@/lib/db/schema";
import { eq } from "drizzle-orm";
shortest("使用用户名和密码登录应用", {
username: process.env.USERNAME,
password: process.env.PASSWORD,
}).after(async ({ page }) => {
// 从页面获取当前用户的 Clerk ID
const clerkId = await page.evaluate(() => {
return window.localStorage.getItem("clerk-user");
});
if (!clerkId) {
throw new Error("数据库中未找到用户");
}
// 查询数据库
const [user] = await db
.select()
.from(users)
.where(eq(users.clerkId, clerkId))
.limit(1);
expect(user).toBeDefined();
});
生命周期钩子
您可以使用生命周期钩子在测试前后运行代码。
import { shortest } from "@antiwork/shortest";
shortest.beforeAll(async ({ page }) => {
await clerkSetup({
frontendApiUrl:
process.env.PLAYWRIGHT_TEST_BASE_URL ?? "http://localhost:3000",
});
});
shortest.beforeEach(async ({ page }) => {
await clerk.signIn({
page,
signInParams: {
strategy: "email_code",
identifier: "iffy+clerk_test@example.com",
},
});
});
shortest.afterEach(async ({ page }) => {
await page.close();
});
shortest.afterAll(async ({ page }) => {
await clerk.signOut({ page });
});
测试链式调用
Shortest 支持灵活的测试链式调用模式:
// 顺序测试链
shortest([
"用户可以使用邮箱和密码登录",
"用户可以修改其账户级别的退款政策",
]);
// 可复用的测试流程
const loginAsLawyer = "使用有效凭证登录律师账号";
const loginAsContractor = "使用有效凭证登录承包商账号";
const allAppActions = ["向公司发送发票", "查看发票"];
// 使用展开运算符组合流程
shortest([loginAsLawyer, ...allAppActions]);
shortest([loginAsContractor, ...allAppActions]);
API 测试
使用自然语言测试 API 端点
const req = new APIRequest({
baseURL: API_BASE_URI,
});
shortest(
"确保响应仅包含活跃用户",
req.fetch({
url: "/users",
method: "GET",
params: new URLSearchParams({
active: true,
}),
}),
);
或者更简单地:
shortest(`
测试 API GET 端点 ${API_BASE_URI}/users,查询参数为 { "active": true }
预期响应应仅包含活跃用户
`);
运行测试
pnpm shortest # 运行所有测试
pnpm shortest login.test.ts # 运行文件中的特定测试
pnpm shortest login.test.ts:23 # 使用行号运行文件中的特定测试
pnpm shortest --headless # 以无头模式运行
您可以在 examples 目录中找到示例测试。
CI 设置
您可以通过在无头模式下运行测试,在 CI/CD 流水线中运行 Shortest。请确保将您的 Anthropic API 密钥添加到 CI/CD 流水线的密钥中。
GitHub 2FA 登录设置
Shortest 支持使用 GitHub 2FA 登录。对于 GitHub 身份验证测试:
- 前往您的仓库设置
- 导航到“密码和身份验证”
- 单击“身份验证器应用”
- 选择“使用身份验证器应用”
- 单击“设置密钥”以获取 OTP 密钥
- 将 OTP 密钥添加到您的
.env.local文件中,或使用 Shortest CLI 添加 - 将终端中显示的 2FA 代码输入到 GitHub 的身份验证器设置页面中,以完成设置过程
shortest --github-code --secret=<OTP_SECRET>
环境设置
.env.local 中需要以下内容:
ANTHROPIC_API_KEY=your_api_key
GITHUB_TOTP_SECRET=your_secret # 仅用于 GitHub 身份验证测试
Shortest CLI 开发
NPM 包位于 packages/shortest/。请参阅 CONTRIBUTING 指南。
Web 应用开发
本指南将帮助您为本地开发设置 Shortest Web 应用程序。
前置条件
- React >=19.0.0(若与 Next.js 14+ 或 Server Actions 搭配使用)
- Next.js >=14.0.0(若使用 Server Components/Actions)
[!警告] 在 Next.js 14+ 项目中将此包与 React 18 一起使用,可能会导致与 Server Actions 和
useFormStatus的类型冲突。如果遇到表单操作或 React 钩子相关的类型错误,请确保使用 React 19。
开始使用
- 克隆仓库:
git clone https://github.com/antiwork/shortest.git
cd shortest
- 安装依赖:
npm install -g pnpm
pnpm install
环境设置
对于 Antiwork 团队成员
拉取 Vercel 环境变量:
pnpm i -g vercel
vercel link
vercel env pull
对于其他贡献者
- 运行
pnpm run setup来配置环境变量。 - 设置向导会提示您输入相关信息。更多详情请参阅下方的“服务配置”部分。
设置数据库
pnpm drizzle-kit generate
pnpm db:migrate
pnpm db:seed # 创建 Stripe 产品,目前未使用
服务配置
您需要为本地开发设置以下服务。如果您不是 Antiwork Vercel 团队成员,则需要运行设置向导 pnpm run setup,或者手动配置这些服务,并将相应的环境变量添加到您的 .env.local 文件中:
Clerk
- 访问 clerk.com,创建一个新的应用。
- 为应用命名,然后仅保留 GitHub 登录方式,禁用其他所有登录方法。

- 创建完成后,将环境变量复制到您的
.env.local文件中。
- 在 Clerk 控制台中,关闭“要求使用同一设备和浏览器”的设置,以确保与 Mailosaur 的测试能够正常工作。
Vercel Postgres
- 登录 vercel.com 的仪表板。
- 转到“存储”选项卡,点击“创建数据库”按钮。

- 在“浏览存储”菜单中选择
Postgres。
- 从“快速入门”的
.env.local选项卡中复制您的环境变量。
Anthropic
- 登录 anthropic.com 的仪表板,获取您的 API 密钥。
- 注意:如果您之前从未进行过此操作,可能需要回答一些问题,并为账户充值。测试应用程序并不需要太多资金。

- 注意:如果您之前从未进行过此操作,可能需要回答一些问题,并为账户充值。测试应用程序并不需要太多资金。
Stripe
- 登录 stripe.com 的“开发者”仪表板。
- 打开“测试模式”。
- 转到“API 密钥”选项卡,复制您的“密钥”。

- 打开项目的终端,输入
pnpm run stripe:webhooks。系统会提示您使用验证码登录,随后生成您的STRIPE_WEBHOOK_SECRET。
GitHub OAuth
创建 GitHub OAuth 应用程序:
- 前往您的 GitHub 账户设置。
- 导航至“开发者设置” > “OAuth 应用程序” > “新建 OAuth 应用程序”。
- 填写应用详细信息:
- 应用名称:任意选择一个名称
- 主页 URL:设置为
http://localhost:3000,用于本地开发 - 授权回调 URL:使用 Clerk 提供的回调 URL(见下图)

在 Clerk 中配置 GitHub OAuth:
- 前往您的 Clerk 控制台。
- 导航至“配置” > “SSO 连接” > “GitHub”。
- 选择“使用自定义凭据”。
- 输入您刚刚创建的 GitHub OAuth 应用程序中的“客户端 ID”和“客户端密钥”。
- 添加
repo到“作用域”中。
Mailosaur
- 在 mailosaur.com 注册一个 Mailosaur 账户。
- 创建一个新的收件箱/服务器。
- 转到“API 密钥”页面,创建一个标准密钥。
- 更新环境变量:
MAILOSAUR_API_KEY:您的 API 密钥MAILOSAUR_SERVER_ID:您的服务器 ID
用于测试登录流程的电子邮件格式为 shortest@<MAILOSAUR_SERVER_ID>.mailosaur.net,其中 <MAILOSAUR_SERVER_ID> 是您的服务器 ID。请务必将该邮箱作为新用户添加到 Clerk 应用中。
本地运行
启动开发服务器:
pnpm dev
在浏览器中打开 http://localhost:3000,即可查看应用运行效果。
版本历史
v0.4.92025/04/01v0.4.82025/03/25v0.4.72025/03/16v0.4.62025/03/09v0.4.52025/03/02v0.4.42025/02/23v0.4.32025/01/31v0.4.22025/01/16v0.4.12025/01/08v0.4.02025/01/02v0.3.02024/12/31v0.2.12024/12/30相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。