最短的
AI动力自然语言端到端测试框架.
特征
- 自然语言测试书写
- 使用 Claude 计算机使用 API 的 AI 动力测试执行
- 建于 Playwright 上
- GitHub 集成与 2FA 支持
安装
使用 shortest init 命令来简化新项目或现有项目中的设置进程.
这个 shortest init 命令将 :
npx @antiwork/shortest init
这将:
- 自动安装
@antiwork/shortest包件为 dev 依赖,如果尚未安装 - 创建默认
shortest.config.ts带有锅炉板配置的文件 - 生成 a
.env.local包含需要的环境变量的占位符的文件(除非存在),例如SHORTEST_ANTHROPIC_API_KEY或者说ANTHROPIC_API_KEY - 添加
.env.local财务报告和审定财务报表.shortest/改为.gitignore
快开始
- 确定您的测试条目并在配置文件中添加您的 Anthropic API 密钥 :
shortest.config.ts
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("Login to the app using email and password", {
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("Login to the app using username and password", {
username: process.env.USERNAME,
password: process.env.PASSWORD,
}).after(async ({ page }) => {
// Get current user's clerk ID from the page
const clerkId = await page.evaluate(() => {
return window.localStorage.getItem("clerk-user");
});
if (!clerkId) {
throw new Error("User not found in database");
}
// Query the database
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: "[email protected]",
},
});
});
shortest.afterEach(async ({ page }) => {
await page.close();
});
shortest.afterAll(async ({ page }) => {
await clerk.signOut({ page });
});
链条测试
最短支持灵活的测试链式:
// Sequential test chain
shortest([
"user can login with email and password",
"user can modify their account-level refund policy",
]);
// Reusable test flows
const loginAsLawyer = "login as lawyer with valid credentials";
const loginAsContractor = "login as contractor with valid credentials";
const allAppActions = ["send invoice to company", "view invoices"];
// Combine flows with spread operator
shortest([loginAsLawyer, ...allAppActions]);
shortest([loginAsContractor, ...allAppActions]);
Shortest的风格允许设计师,营销师等非工程师,以及PM编写测试. 以下是一些例子:
shortest("visit every page and ensure no typos");
shortest("visit every page and ensure mobile layout isn't janky");
shortest("visit every page and ensure dark mode is considered");
API 测试
使用自然语言测试 API 端点
const req = new APIRequest({
baseURL: API_BASE_URI,
});
shortest(
"Ensure the response contains only active users",
req.fetch({
url: "/users",
method: "GET",
params: new URLSearchParams({
active: true,
}),
}),
);
或者简单地说:
shortest(`
Test the API GET endpoint ${API_BASE_URI}/users with query parameter { "active": true }
Expect the response to contain only active users
`);
正在测试
pnpm shortest # Run all tests
pnpm shortest login.test.ts # Run specific tests from a file
pnpm shortest login.test.ts:23 # Run specific test from a file using a line number
pnpm shortest --headless # Run in headless mode using
您可以在 examples 目录.
GitHub 2FA 登录设置
目前最短版本支持使用 Github 2FA 登录. 对于 GitHub 认证测试 :
- 转到您的仓库设置
- 导航到“ Password and Authority ”
- 点击“ 认证器 App ”
- 选择“ 使用您的认证程序 ”
- 点击“ 设置密钥” 以获取检察官办公室的秘密
- 将检察官办公室的秘密添加到您的
.env.local文件或使用最短的 CLI 来添加 - 将您终端中显示的 2FA 代码输入 Github 认证器设置页面, 以完成进程
shortest --github-code --secret=<OTP_SECRET>
环境设置
要求在 .env.local数字 :
ANTHROPIC_API_KEY=your_api_key
GITHUB_TOTP_SECRET=your_secret # Only for GitHub auth tests
CI 设置
通过无头模式的测试,您可以在您的CI/CD管道中运行最短的运行. 请将您的 Anthropic API 密钥添加到您的 CI/CD 管道机密中 .
资源
先决条件
- 反射QQ19.0.0( 如果使用 Next.js 14+ 或服务器动作)
- Next.js QQ14.0.0(如果使用服务器组件/动作)
[尖叫声] 在 Next.js 14+ 工程中使用这个带有 React 18 的软件包可能导致与 Server Action 的类型冲突以及
useFormStatus如果遇到形式动作或反应钩的类型错误,请确保使用反应19