QA之二 -- 测试用例

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


一、测什么?

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 超时突变体 植入突变后测试执行超时的数量 越少越好 需排查是否是突变体导致性能问题
posted @ 2026-02-14 16:49  cac2020  阅读(18)  评论(0)    收藏  举报