知识点深化 · 测试质量工程
测试质量工程:测试金字塔、单元/接口/E2E、LLM Evals、CI 质量门
FDE 交付的东西不能是"我本地跑通了"就完事。这一页讲透测试金字塔怎么落地、单元测试怎么写才有效、LLM 应用怎么用 Evals 测、CI 怎么卡质量门、为什么不要追求 100% 覆盖率。
① 小白第一课怎么学(5 步走,约 90 分钟)
核心认知:测试是安全网,不是形式主义。
1理解测试金字塔(15 分钟)
读②③:为什么底层多、顶层少。
2写单元测试(25 分钟)
读④:测行为不测实现。
3LLM Evals(25 分钟)
读④:评测集+回归。
4CI 质量门(15 分钟)
测试不过不让发版。
5刷题巩固(10 分钟)
做⑥⑦⑩。
本课小目标学完你要能:① 说清测试金字塔三层各是什么;② 给核心函数写有效单元测试;③ 给 LLM 应用建评测集;④ 配 CI 自动跑测试卡质量门。
② 一图看懂:测试金字塔
读法:底层单元测试多而快,顶层 E2E 少而慢。LLM Evals 是 AI 应用专属测试。CI 把所有测试串成质量门。
③ 本质直觉:测试就是"给自己买后悔药"
想象你在改一个老代码。没有测试的时候,你改完不敢上线——怕搞坏老功能。
测试就是安全网:你改完代码跑一遍测试,如果之前测过的地方还都过,就说明没搞坏。
就像走钢丝下面有张网:走的时候心里踏实,摔了也接住。
80% 的测试精力放在最容易出 bug 的核心路径上,不要追求 100% 覆盖率。一个内部管理后台写一堆测试是浪费。
不要追求 100% 覆盖率覆盖率只是数字,不重要逻辑测再多也没价值。核心业务路径测好,边缘代码能手动测到就行。
④ 完整体系:三层测试 + LLM Evals + CI
测试金字塔三层
| 层级 | 测什么 | 数量 | 速度 | 例子 |
| 单元测试 | 单个函数/类逻辑 | 最多 | 毫秒 | 金额计算、字符串处理 |
| 接口测试 | API 输入输出 | 中等 | 秒级 | POST /orders 返回 201 |
| E2E 测试 | 完整用户流程 | 最少 | 分钟级 | 注册到下单全流程 |
单元测试示例(pytest)
def calc_total(items, tax=0.06):
subtotal = sum(i["price"]*i["qty"] for i in items)
return round(subtotal * (1+tax), 2)
# test_calc.py
def test_basic():
items = [{"price":100,"qty":2},{"price":50,"qty":1}]
assert calc_total(items) == 265.0
def test_empty():
assert calc_total([]) == 0
def test_zero_tax():
assert calc_total([{"price":100,"qty":1}], tax=0) == 100
LLM 应用 Evals 怎么做
| 步骤 | 做什么 |
| 1. 建评测集 | 20-50 个典型问题 + 标准答案要点 |
| 2. 跑一遍 | 每个问题调 LLM,看是否命中要点 |
| 3. 测幻觉 | 出几个资料里没有的问题,看会不会瞎编 |
| 4. 回归 | 改 Prompt/模型后跑一遍,通过率不掉才上线 |
CI 配置示例
# .github/workflows/test.yml
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install pytest
- run: pytest tests/ -v
⑤ 用法场景与典型例题
例1(单元测试)给"计算订单总价"函数写测试,要覆盖哪些场景?
边界值必测。
① 正常情况:多件商品算总价。
② 空购物车:总价 0。
③ 税率为 0:不打税。
④ 数量为 0:该商品不计价。
答案:正常+边界(空/0/极值)都要测。
例2(LLM Evals)怎么测 RAG 系统"回答得好不好"?
不能断言固定输出。
① 建 20-50 个典型问题+答案要点的评测集。
② 跑一遍,看答案是否命中要点关键词。
③ 出几个资料没有的问题,看模型会不会说"不知道"。
④ 改 Prompt 后跑回归,通过率不下降才上线。
答案:评测集+关键词命中+幻觉测试+回归。
例3(CI)测试不过为什么不让合并?
质量门的意义。
① 测试不过说明有 bug 或改坏了。
② 如果跳过测试硬发,以后就会无数次跳过,质量越来越差。
③ CI 把"靠自觉"变成"不跑不让过"。
答案:测试不过就修,别跳过。质量门一旦开口子就守不住。
⑥ 高频错误诊断(4 条)
错误 1:追求 100% 覆盖率不重要的代码写一堆测试,维护成本爆炸。核心路径测好就行,覆盖率是参考不是目标。
错误 2:E2E 测试写太多慢、脆、难维护。前端改个按钮 id 就挂。正确做法:核心流程留 3-5 个 E2E,其余靠单元+接口。
错误 3:LLM 应用不做 Evals 回归改了 Prompt 直接上线,结果某些 case 变差了。每次改完必跑评测集,通过率不掉才发。
错误 4:测试和业务代码一起写都来不及,哪有空写测试错。测试是安全网,越赶时间越要写——不然改坏了老功能,花的时间更多。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 测试金字塔 | 三层比例 | 单元多/E2E少 |
| 单元测试 | 测什么场景 | 正常+边界 |
| LLM Evals | 怎么测 AI 输出 | 评测集+回归 |
| CI 质量门 | 不过为什么不能发 | 守底线 |
真题基础1. 测试金字塔哪层应该写最多?
真题中档2. LLM 应用为什么不能断言固定输出?
真题中档3. 改了 Prompt 后为什么要跑评测回归?
真题拔高4. 为什么不建议追求 100% 测试覆盖率?
⑧ 必背知识点卡
金字塔:单元多/接口中/E2E少 底层快顶层慢
单元测试:测行为不测实现,边界值必测 空/0/极值
接口测试:正常/参数错/未登录/无权限/不存在 状态码要对
LLM Evals:评测集+关键词命中+幻觉测试+回归 改完必跑
CI:测试不过不让合并/发版 质量门
覆盖率:不追求 100%,核心路径测好就行 数字不重要
⑨ 应用输出:给一个简单 API 写测试
场景:一个订单 CRUD API,要写测试
① 单元测试:给金额计算函数写 3 个 case(正常/空/0税率)。
② 接口测试:POST 创建成功返回 201;查不存在的订单返回 404;未登录访问返回 401。
③ E2E:留一个核心流程——用户登录→创建订单→查订单列表。
④ CI:配 GitHub Actions,push 自动跑 pytest,不过不让合并。
⑤ 如果有 LLM 功能:建 20 个问答评测集,改 Prompt 后跑一遍回归。
口述测试策略"单元测核心逻辑,接口测 API 状态码,E2E 只留关键流程,CI 卡质量门,LLM 功能加 Evals 回归。"
⑩ 分层练习 15 题(基础 5 + 中档 5 + 拔高 5)
▍基础 5 题
基础1测试金字塔底层是什么?
单元测试,数量最多、速度最快。
基础2E2E 测试应该多写还是少写?
少写。慢、脆、贵。核心流程留 3-5 个就够。
基础3单元测试测什么?
单个函数/类的输入输出,测行为不测实现。边界值必测。
基础4CI 是什么?
持续集成——提交代码自动跑测试,不过就拦住不让合并。
基础5LLM 应用为什么不能断言固定输出?
大模型输出有随机性,每次可能不一样。要用评测集+关键词命中来测。
▍中档 5 题
中档6接口测试要测哪些状态码?
正常 200/201、参数错 400、未登录 401、无权限 403、不存在 404。
中档7LLM Evals 怎么建评测集?
选 20-50 个典型问题,每个写好答案要点(关键词),跑一遍看命中率。
中档8改 Prompt 后为什么要跑回归?
防止改了 Prompt 让某些 case 变差。通过率不下降才能上线。
中档9测试不过为什么不能跳过?
跳过一次就会有无数次。质量门一旦开口子就守不住,系统质量会越来越差。
中档10为什么不追求 100% 覆盖率?
不重要代码写一堆测试,维护成本爆炸但价值很低。核心路径测好就行。
▍拔高 5 题
拔高11E2E 测试为什么脆?
前端改个按钮 id、后端改个字段名就挂。定位问题也慢——不知道是哪层错了。所以要少写。
拔高12怎么测 LLM 有没有幻觉?
出几个资料里完全没有的问题,看模型会不会说"不知道"。如果瞎编了就要优化 Prompt 或检索。
拔高13单元测试应该测实现还是行为?
测行为——输入什么输出什么。不要测内部变量和私有方法,不然重构代码测试全挂。
拔高14什么时候该写集成测试而不是单元测试?
当一个功能涉及多个组件协作(如 API→DB),单元测试各测各的测不出来集成问题时,写接口/集成测试。
拔高15LLM 应用的"测试通过"标准是什么?
评测集通过率不下降 + 不瞎编(超出资料范围会说不知道)。不是"每条都完美",而是"不退化"。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① 测试金字塔:单元多、接口中、E2E 少。
② LLM 用 Evals:评测集+回归,不退化就上线。
③ CI 卡质量门:测试不过不让发版。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③,画一遍测试金字塔 | 能说清三层比例 |
| 第 2 天 | 背测试分类 + 做基础 1-5 | 基础全对 |
| 第 3 天 | 写一个函数的单元测试 | 边界值都覆盖 |
| 第 4 天 | 做中档 6-10,理解 LLM Evals | 会建评测集 |
| 第 5 天 | 做拔高 11-15 + 真题 4 题 | 会配 CI |
| 第 6-7 天 | 口述一个项目测试策略,默写金字塔 | 不看资料全默对 |
← 返回 FDE 培养总览