AI 驱动的测试(2025+ 新方向)
2025+ 测试领域最大的变化是 AI 双向渗透:
- AI 帮人写测试 / 修测试(AI 提效)
- 测试 AI 应用(AI 产品上线前要 QA)
两者都是前端/全栈面试新热点。
一、避坑指南
AI 生成 ≠ 免 review:
- AI 写的测试必须人工过一遍,定位器断言可能全错
- AI 容易「通过即胜利」,但断言不到位(如
expect(true).toBe(true))
AI 测试工具 ≠ 万能:
- 探索测试(AI agent 跑用例)还是脆弱,仅适合冒烟,不替代核心 E2E
- 视觉回归 AI(Meticulous)抗小变化,但抗不了大改版
测试 AI 应用(LLM) 别陷入「用 LLM 测 LLM」循环:
- 评估 prompt 质量需要人评 + 指标
- 不要完全依赖 LLM-as-judge
二、AI 帮我们写测试
2.1 AI 生成测试代码
| 工具 | 能力 | 适合 |
|---|---|---|
| GitHub Copilot | 自动补全单测函数体 | 工具函数 / hooks |
| Cursor / Trae | 根据组件代码生成测试文件 | 组件测试 |
| Claude Code / Copilot Workspace | 一次性生成完整 describe 块 | 集成测试 |
| CodiumAI / Qodo | 专门做 AI 测试生成 | 多场景覆盖 |
| Diffblue Cover | Java 专用(自动生成单测) | 后端服务 |
实战示例(Cursor / Trae):
// 你给 AI 一段组件
export function add(a: number, b: number) {
return a + b;
}
// AI 自动生成(质量通常不差)
describe("add", () => {
it("正数相加", () => {
expect(add(2, 3)).toBe(5);
});
it("负数相加", () => {
expect(add(-1, -2)).toBe(-3);
});
it("0", () => {
expect(add(0, 0)).toBe(0);
});
it("浮点", () => {
expect(add(0.1, 0.2)).toBeCloseTo(0.3); // ✅ 浮点处理细节,AI 也知道
});
});
建议:把项目规范写进 AGENTS.md(见 AI 编码工具协同规范),让 AI 生成的测试符合你的风格(用
screen.getByRole而不是querySelector)。
2.2 AI 自动修复 flaky tests
Flaky test = 时过时不过的测试,是 CI 最大杀手。
传统方案:
- 重试(
retries: 2) - 加大等待
- 但找不到根因
AI 方案:
| 工具 | 能力 |
|---|---|
| Playwright Agent | 自愈定位器(UI 改了自动重试) |
| Stagehand(Browserbase) | AI 驱动浏览器,UI 改了大半也能跑 |
| testRigor | 自然语言写测试,AI 解析 |
| Mabl | 自愈 + 自动重跑失败用例 |
Playwright Agent 示意:
// 传统:UI 一改测试就挂
await page.locator(".btn-submit-v2").click(); // 改名了!
// Agent:AI 找相似语义的元素
await page.getByRole("button", { name: /提交|确认|保存/ }).click();
2026 现状:AI 自愈还不成熟,仅适合「元素改名」级别的小变化,组件结构大改还是挂。
2.3 AI 视觉回归
传统视觉回归(Playwright
toHaveScreenshot)用像素对比,字体抗锯齿、subpixel 渲染都会导致误报。
AI 视觉回归方案:
| 工具 | 能力 | 价格 |
|---|---|---|
| Meticulous.ai | 模拟真实用户视角,抗微小变化 | 付费 |
| Chromatic | Storybook 视觉回归,云端 AI 校对 | 部分免费 |
| Percy | 类似 Chromatic,集成 CI | 付费 |
| 自训练模型 | 收集历史截图训练「设计规范模型」 | 成本高 |
vs 像素对比:
| 维度 | 像素对比 | AI 视觉回归 |
|---|---|---|
| 抗字体渲染 | ❌ 经常误报 | ✅ 智能忽略 |
| 抗抗锯齿 | ❌ | ✅ |
| 抗布局微调 | ❌ | ✅ |
| 大改版 | ✅ 直接挂 | ⚠️ 需重新训练 |
| 速度 | 快 | 慢(云端 AI 推理) |
建议:新项目用 Playwright
toHaveScreenshot起步,日均误报 > 5% 再考虑 AI 视觉回归。
三、测试 AI 应用(2025+ 面试高频)
AI 产品上线前要 QA,怎么测 LLM 的输出? 是新方向。
3.1 LLM 输出评估的挑战
// 传统断言
expect(translate("Hello")).toBe("你好");
// LLM 输出(每次可能不同)
const output = await llm.invoke("把 Hello 翻译成中文");
// output = "你好" / "您好" / "哈啰" —— 都对,但断言写啥?
核心难点:
- 输出是非确定性的(每次不同)
- 正确答案可能多个
- 没法用
toBe断言
3.2 评估方法
① 人工评估(最准)
抽样让真人打分。评估 prompt 质量的金标准。
② 指标评估
// RAGAS 评估 RAG 系统
import { evaluate } from "ragas";
const result = await evaluate({
dataset: {
questions: ["Next.js 是什么?", "React 和 Vue 哪个好?"],
ground_truths: ["Next.js 是 React 全栈框架", "看场景..."],
},
metrics: [
"answer_relevancy", // 答案相关性
"faithfulness", // 忠实度(不瞎编)
"context_precision", // 上下文精确度
"context_recall", // 上下文召回率
],
});
| 指标 | 含义 | 适用 |
|---|---|---|
answer_relevancy | 答案和问题匹配度 | 通用 |
faithfulness | 答案是否忠于检索内容(不编) | RAG |
context_precision | 检索的上下文是否精准 | RAG |
context_recall | 是否检索到必要信息 | RAG |
hallucination | 编造率(越低越好) | 通用 |
toxicity | 毒性(越低越好) | 对话 |
③ LLM-as-judge(用 LLM 评估 LLM)
import OpenAI from "openai";
async function judgeAnswer(question: string, answer: string): Promise<number> {
const prompt = `
评估下面回答的质量(0-10 分):
问题:${question}
回答:${answer}
评分标准:
- 相关性
- 准确性
- 完整性
只输出一个数字:
`;
const res = await openai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: prompt }],
temperature: 0, // 评估要稳
});
return Number(res.choices[0].message.content);
}
风险:LLM-as-judge 有偏差(偏好自己模型的输出),不能 100% 替代人评。
④ 单元化 + 黄金样本
// 准备一组「标准问答」
const goldenQA = [
{ q: "Next.js 是什么?", expectedKeywords: ["React", "全栈", "框架"] },
{ q: "如何重置 React 状态?", expectedKeywords: ["key", "remount"] },
];
test.each(goldenQA)("答案包含关键概念", async ({ q, expectedKeywords }) => {
const answer = await llm.invoke(q);
for (const kw of expectedKeywords) {
expect(answer).toContain(kw); // 弱断言:包含关键词
}
});
优点:CI 可跑、可回归;缺点:关键词不全等于「答得对」。
3.3 Agent 测试
Agent = LLM + 工具调用(function calling)。测试 Agent 更难。
测试维度:
| 维度 | 怎么测 |
|---|---|
| 任务完成率 | 给任务,跑 N 次,看成功率 |
| 工具调用正确性 | 断言调了哪些工具、参数对不对 |
| 规划能力 | 多步任务,看路径是否合理 |
| 回退能力 | 工具失败时能否换方案 |
| 成本 | 一次任务消耗的 token 数 |
// 伪代码
test("Agent 能订外卖", async () => {
const result = await agent.run("帮我订一份麦当劳");
expect(result.success).toBe(true);
expect(result.toolCalls).toContain("search_restaurant");
expect(result.toolCalls).toContain("place_order");
expect(result.tokenCount).toBeLessThan(5000);
});
3.4 Prompt 回归测试
改 prompt 是高风险操作,改完要跑回归。
// 1. 准备 prompt 变体
const promptVariants = {
v1: "你是助手,请回答:{q}",
v2: "你是一名资深工程师,请专业回答:{q}",
v3: "请用 100 字以内回答:{q}",
};
// 2. 跑同一组问题
const questions = ["Next.js 是什么?", "..."];
for (const [name, tmpl] of Object.entries(promptVariants)) {
test(`prompt ${name}`, async () => {
for (const q of questions) {
const answer = await llm.invoke(tmpl.replace("{q}", q));
expect(answer).toBeDefined();
// 可加:长度、关键词、LLM-as-judge
}
});
}
四、推荐工具(2025+ 主流)
| 方向 | 工具 | 用途 |
|---|---|---|
| AI 生成单测 | Copilot / Cursor / CodiumAI / Qodo | 提速 |
| AI 修 flaky | Playwright Agent / Stagehand / Mabl | 减维护成本 |
| AI 视觉回归 | Meticulous / Chromatic / Percy | 抗 UI 微小变化 |
| LLM 评估 | RAGAS / DeepEval / LangSmith | RAG 质量 |
| LLM 监控 | LangSmith / Helicone / Phoenix(Arize) | 生产环境追踪 |
| Agent 测试 | LangSmith Agent Eval / LangChain Evaluations | Agent 任务成功率 |
| Prompt 管理 | PromptLayer / Vellum / LangSmith Hub | 版本管理 + A/B |
2026 主流组合:
- RAG 业务:LangChain + RAGAS + LangSmith
- Agent 业务:LangChain + DeepEval + Phoenix
- 生产监控:Helicone(成本 + 延迟 + 错误率)
五、CI 集成 AI 测试
# .github/workflows/llm-test.yml
name: LLM Eval
on: [pull_request]
jobs:
llm-eval:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: pnpm install
# 1. 跑 RAGAS 评估(要 LLM API key)
- name: 跑 LLM 评估
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: pnpm eval:ragas
# 2. 检查指标是否退化
- name: 检查指标
run: |
SCORE=$(cat eval-results.json | jq '.faithfulness')
if (( $(echo "$SCORE < 0.8" | bc -l) )); then
echo "RAG faithfulness 退化到 $SCORE,要求 ≥ 0.8"
exit 1
fi
注意:CI 跑 LLM 评估会消耗 token,建议只在 PR 改 prompt 时跑,日常 PR 跳过。
六、面试高频
Q1:怎么测 LLM 的输出?
A:四种方法组合:
- 人工评估(最准,金标准)
- 指标评估(RAGAS 的 faithfulness / answer_relevancy)
- LLM-as-judge(用 GPT-4 给结果打分)
- 黄金样本(断言包含关键词)
没有银弹,要多种方式组合。
Q2:AI 写的测试可信吗?
A:需要 review。AI 擅长:模板、断言套娃。不擅长:业务理解、关键边界。建议:AI 写 → 人审 → 加到主分支。
Q3:传统视觉回归和 AI 视觉回归怎么选?
A:传统(Playwright toHaveScreenshot):快、便宜、误报多。AI(Meticulous / Chromatic):慢、贵、误报少。策略:日均误报 < 5% 用传统;> 5% 升级到 AI。
Q4:怎么测 AI Agent?
A:四维评估:① 任务完成率(跑 N 次看成功率);② 工具调用正确性;③ 规划能力(多步任务路径);④ 成本(token 消耗)。
Q5:改 prompt 怎么回归测试?
A:① 准备「黄金问答集」;② 跑所有 prompt 变体;③ 用指标(RAGAS / LLM-as-judge)对比;④ CI 阻断「指标退化」。