惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - cac2020

QA之三 - 变异测试 -- PITest QA之二 - 单元测试-- JaCoCo QA之二 - 单元测试-- JUnit5 + Mockito QA之二 - 单元测试--Mockito QA之二 - 单元测试--JUnit5 QA之一 -- 常见测试类型和测试环境 密码学之三 —— MPC(TSS)、多签、时间锁 密码学之二 —— GPG、SSH、KMS 密码学之一 —— 三类算法 记录一次在线word转PDF的问题处理过程 分析Java堆Dump Java GC日志分析 Java线程Dump分析(TDA-Thread Dump Analyzer) Java可视化故障处理工具-VisualVM Java基础故障处理工具 记录Arthas在一次性能调优过程中实践 中小型系统必要可行的性能测试实践--ArtHas调优实战 中小型系统必要可行的性能测试实践--jmeter落地实践 中小型系统必要可行的性能测试实践--性能测试理论基础
QA之二 -- 测试用例
cac2020 · 2026-02-14 · via 博客园 - cac2020

测试用例 是为了验证某个功能是否正确,提前设计好的一套可执行、有标准答案的测试步骤。
简单说:测试用例 = 测什么 + 怎么测 + 预期应该是什么结果。

一、测什么?

1、语义覆盖

语义覆盖是以「业务语义 / 逻辑规则」为核心的测试覆盖标准,它不只是关注「代码是否被执行」(传统代码覆盖),更关注「代码执行的结果是否符合业务语义规则」。

语义覆盖通常包含哪些内容?

  • A. 核心规则覆盖(Business Rules)
    • 输入校验规则(合法/非法)
    • 权限/角色规则(允许/拒绝)
    • 金额/费率/精度/舍入规则(正确性)
  • B. 状态机覆盖(State Transitions)
    • 关键状态是否能正确流转
    • 非法状态流转是否被拒绝
    • 重复触发是否幂等(不会重复扣/重复执行)
  • C. 异常语义覆盖(Failure Semantics)
    • 依赖失败(超时/异常)时
      • 是否回滚/补偿
      • 是否返回正确错误码
      • 是否触发重试/告警
    • 不同异常是否区分可重试/不可重试
  • D. 边界与不变量覆盖(Invariants)
    • 关键不变量始终成立(例如余额不为负、总和守恒等)
    • 边界值:0、最小/最大、临界精度、空集合、null
  • E. 并发语义覆盖(Concurrency Semantics)
    • 并发重复请求下仍满足幂等与不变量
    • 锁/乐观锁冲突后的结果正确

2、测试用例模板

编号、所属模块、标题、重要级别、测试数据、操作步骤、预期结果、测试结果、行覆盖率、分支覆盖率、变异测试得分

  • 测试数据:测试输入项和对应的值。

3、按场景举例

  • todo

二、怎么测?

  • 1、单元测试 - 数量最多,反馈最快

    • 覆盖:纯业务逻辑、边界条件、异常分支、状态机
    • 特点:不依赖 DB/网络,秒级执行
    • 工具:JUnit5 + Mockito + PIT(pitest)
  • 2、组件/集成测试 - 少而关键

    • 覆盖:DAO/SQL、事务、序列化、外部依赖契约
    • 工具:Testcontainners(DB/Redis/Kafka)、SpringBootTest(谨慎用、慢)
  • 3、测试用例模板 - 最少但保证主链路

    • 覆盖:核心用户流程、发布验收
    • 成本高:适合少量关键路径
    • 工具:Postman/Newman、pytest、自动化脚本

三、结果如何验证?

  • 1、测试结果验证:测试结果是否等于预期结果

    • 首先保证功能测通,这是门限。
  • 2、JaCoCo代码覆盖率
    JaCoCo(Java Code Coverage)是Java/Android 代码覆盖率统计工具,能精准统计测试用例对代码的覆盖程度,生成可视化报告(HTML/XML/CSV)。核心覆盖率指标如下:

    • 指令覆盖(Instruction):统计字节码指令是否被执行,计算方式:已执行指令数 / 总指令数,达标与之:≥90%,最基础覆盖,仅说明代码 “跑过”;
    • 行覆盖(Line):统计源码行是否被执行(核心),已执行行数 / 总行数,≥95%,直观反映源码级覆盖,新手最易理解;
    • 分支覆盖(Branch):统计 if/switch 等分支是否全执行,已执行分支数 / 总分支数,≥90%,反映逻辑覆盖度(最关键,比如多签的 “签名数是否足够” 分支);
    • 方法覆盖(Method):统计方法是否被调用,已执行方法数 / 总方法数,≥95%,验证核心方法是否被测试;
    • 类覆盖(Class):统计类是否有至少一个方法被执行,已执行类数 / 总类数,100%
      重点关注:行覆盖率 + 分支覆盖。
  • 3、Mutation Testing 变异测试得分

    • Mutation Testing 是什么?
      突变测试(也叫 “变异测试”)是评估测试用例有效性的高阶测试方法,核心逻辑:自动在源码中植入微小的 “语法错误”(称为「突变体 Mutant」,比如把 >= 改成 >、把 + 改成 -),然后运行测试用例;如果测试用例能发现这个错误(让突变体被 “杀死”),说明测试用例有效;如果测试用例没发现(突变体 “存活”),说明测试用例遗漏了关键逻辑,需要优化。

    • 与 JaCoCo 代码覆盖的核心区别:
      代码覆盖是 “做了测试”,突变测试是 “测试做得有效”。

    • Mutation Testing 核心报告指标

Mutation Score (MS) 突变分数:测试用例杀死突变体的能力 (Killed Mutants / Total Valid Mutants) × 100% ≥80%(核心业务) 最核心指标,反映测试用例的有效性 Mutation Coverage 突变覆盖:测试用例触及突变体的比例 (Touched Mutants / Total Valid Mutants) × 100% ≥90% 反映测试用例是否 “触达” 了突变体(未触及 = 漏测) Killed Mutants 被杀死的突变体 测试用例执行后,检测到突变体并导致测试失败的数量 越多越好 代表测试用例能发现对应的逻辑错误 Survived Mutants 存活的突变体 测试用例执行后,未检测到突变体(测试仍通过)的数量 0(核心逻辑) 代表测试用例无效,遗漏了关键逻辑 Incompetent Mutants 无效突变体 植入突变后导致源码无法编译 / 运行的数量 越少越好 工具生成的无效突变(无需关注) Timed Out Mutants 超时突变体 植入突变后测试执行超时的数量 越少越好 需排查是否是突变体导致性能问题
指标名称 核心定义 计算公式 达标阈值(参考) 关键意义

学习技术不是用来写HelloWorld和Demo的,而是要用来解决线上系统的真实问题的.