一、单元测试覆盖率
1.1 什么是单元测试覆盖率
单元测试覆盖率衡量的是:你写的单元测试用例,到底执行了多少行/多少分支的业务代码。
| 行覆盖率 (Line Coverage) | 有多少行代码被测试执行过 |
| 分支覆盖率 (Branch Coverage) | if/else、switch 等分支被覆盖了多少 |
| 方法覆盖率 (Method Coverage) | 有多少个方法被调用过 |
1.2 业界参考标准
| 0% | 没写测试(老项目常见) |
| 30%-50% | 有测试意识,但覆盖不全 |
| 60%-80% | 比较健康,核心逻辑基本覆盖 |
| 85%+ | 要求严格,通常有 CI 门禁卡死 |
| 100% | 极少见,getter/setter/配置类不值得测 |
1.3 面试怎么说
"我们项目使用 JaCoCo 来度量覆盖率,核心业务模块的行覆盖率在 75%-80%,分支覆盖率在 70% 左右。新增代码要求不低于 80%,CI 流水线里会生成覆盖率报告。简单的 getter/setter 和配置类不强制要求覆盖。"
1.4 怎么做(JaCoCo 方案)
步骤一:pom.xml 添加 JaCoCo 插件
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
步骤二:运行测试
mvn clean test
步骤三:查看报告
用浏览器打开 target/site/jacoco/index.html。
报告用颜色标记每行代码:
-
绿色 = 被测试完全覆盖
-
黄色 = 部分覆盖(if 的某个分支没测到)
-
红色 = 完全没被覆盖
二、API 自动化批量测试(Postman)
2.1 场景描述
你有 50 个接口,每个都需要 Token 鉴权。怎么自动完成所有接口的测试?而不是手动登录 → 复制 token → 每个接口逐个粘贴。
2.2 Postman 方案步骤
第一步:创建 Collection,把所有接口放进去
Collection: 用户管理模块
├── POST /api/login (登录,获取token)
├── GET /api/users (查询用户列表)
├── GET /api/users/{{id}} (查询单个用户)
├── POST /api/users (新增用户)
├── PUT /api/users/{{id}} (更新用户)
└── DELETE /api/users/{{id}} (删除用户)
Collection: 订单管理模块
├── GET /api/orders (查询订单列表)
├── POST /api/orders (创建订单)
├── PUT /api/orders/{{id}}/cancel (取消订单)
└── GET /api/orders/stats (订单统计)
第二步:在 Collection 上写 Pre-request Script(关键步骤)
右键 Collection → Edit → Pre-request Script:
// 每个接口执行前都会先跑这段脚本
// 如果还没有 token,自动调登录接口获取
if (!pm.environment.get("token")) {
pm.sendRequest({
url: "http://localhost:8080/api/login",
method: "POST",
header: { "Content-Type": "application/json" },
body: {
mode: "raw",
raw: JSON.stringify({ username: "admin", password: "123456" })
}
}, function (err, res) {
if (!err) {
var json = res.json();
pm.environment.set("token", json.token);
}
});
}
第三步:所有接口的 Header 引用 Token 变量
在 Authorization 标签页选 Bearer Token,值填 {{token}}。
或者手动添加 Header:
Key: Authorization
Value: Bearer {{token}}
{{token}} 是 Postman 的双花括号变量语法,运行时自动替换。
第四步:Run Collection 一键批量执行
点击 Collection 旁边的 ▶ → Run Collection,所有接口自动按顺序执行,跑完自动生成测试报告。
2.3 进阶技巧
| 环境变量 | 区分开发/测试/生产,切换 Environment 即可 |
| 测试断言 | 在 Tests 标签页写 pm.test("状态码200", () => { pm.response.to.have.status(200); }) |
| 数据驱动 | 用 CSV/JSON 文件批量喂不同测试数据 |
| Newman | Postman 命令行工具,可集成到 CI/CD 流水线 |
| 导出分享 | Collection 可导出 JSON,团队成员可导入 |
2.4 面试怎么说
"我把所有接口放在 Postman 的 Collection 里,在 Collection 级别写一段 Pre-request Script,自动调登录接口拿 Token 并存到环境变量。其余接口统一引用 {{token}} 变量做鉴权。然后用 Postman Runner 一键批量执行,跑完自动生成测试报告。如果要做 CI 集成,用 Newman 命令行跑导出的 Collection JSON 就行。"
三、总结对比
| 测什么 | 单个类/方法的业务逻辑 | 接口的 HTTP 请求/响应 |
| 工具 | JUnit + JaCoCo + Maven | Postman Collection Runner |
| 产物 | 覆盖率报告(HTML) | 测试结果报告 |
| 集成 CI | Surefire 插件自动跑 | Newman 命令行 |
| 适用阶段 | 开发阶段 | 联调/回归阶段 |
| 关注指标 | 行覆盖率、分支覆盖率 | 通过率、响应时间 |


