← 返回 FDE 培养总览 FDE 培养 · 知识点深化 · 测试质量工程
知识点深化 · 测试质量工程

测试质量工程:测试金字塔、单元/接口/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 端到端(少) 慢/脆/贵,测关键流程 接口测试(中) 测 API 输入输出,秒级 单元测试(多) 测函数逻辑,毫秒级,最多 LLM Evals 评测集回归 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 培养总览