SpringBoot 接口测试:Postman 与 JUnit 5 实战

做后端开发,接口测试是绕不开的环节,既要保证接口能正常运行,又要应对前后端联调、线上稳定,所以今天就结合实际开发场景,来讲讲接口测试的方法。

做后端这么久,发现很多同学要么只靠Postman手动测试,要么不知道怎么用代码实现自动化测试,导致上线后容易出问题。其实接口测试就分两步:日常联调用Postman高效配合,迭代维护用JUnit自动化测试,两者结合才能既保证效率又守住质量。

先跟大家说清楚核心逻辑:Postman负责日常联调、快速定位问题,JUnit5负责自动化回归,避免每次迭代都要重复手动测试,这也是企业里最常用的搭配方式。

一、Postman 实战

Postman是我们日常开发中用得最多的工具,重点不是会用,而是用对技巧,提高联调效率,避免踩坑。

1. 环境隔离

做项目时,我们一般会有开发、测试、生产三个环境,每个环境的接口地址、参数可能不一样,要是每次都手动改地址,特别麻烦。所以第一步先配置环境变量:

  • 新建环境(开发环境、测试环境、生产环境),每个环境里设置baseUrl(比如开发环境是http://localhost:8080,测试环境是http://test.demo.com

  • 接口地址统一用{``{baseUrl}}/user这样的格式,切换环境时,不用改接口地址,直接切换环境即可,避免重复修改。

2. 带Token请求

现在大部分项目都需要登录验证,Postman里可以这样操作:

  1. 先调用登录接口,获取Token(一般在返回结果里);

  2. 在请求头里添加token字段,值填获取到的Token;

  3. 这样所有需要权限的接口,都会自动携带Token,不用每次都手动输入。

3. 实用技巧

  • 发送JSON请求时,一定要选对Content-Typeapplication/json,否则后端解析不到参数;

  • 常用接口可以保存到"收藏夹",下次直接调用,不用重复输参数;

  • 遇到接口报错,先看响应码:404是路径错了,401是Token无效,500是后端代码有问题,快速定位原因。

4. 批量测试

如果有多个接口需要测试,不用一个个点,直接用"集合批量运行",勾选需要测试的接口,一键运行,还能导出测试报告,方便跟前端同步联调进度。

二、JUnit5 自动化测试

Postman适合手动联调,但项目上线后,每次迭代都要手动测试一遍所有接口,效率太低,这时候就需要用JUnit5做自动化测试,一次编写,反复使用。

1. 依赖准备

不用额外配置太多,引入核心依赖即可:

go 复制代码
1
2<dependency>
3<groupId>org.springframework.bootgroupId>
4<artifactId>spring-boot-starter-testartifactId>
5<scope>testscope>
6dependency>

2. 示例

我们以用户管理接口为例,写一个完整的测试类,覆盖正常、异常场景:

go 复制代码
1import org.junit.jupiter.api.DisplayName;
2import org.junit.jupiter.api.Test;
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.boot.test.context.SpringBootTest;
5import org.springframework.test.web.servlet.MockMvc;
6importstatic org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
7importstatic org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
8
9// 启动Spring容器,才能注入Service和Controller
10@SpringBootTest
11public class UserControllerTest{
12
13// 注入MockMvc,用于模拟HTTP请求
14@Autowired
15private MockMvc mockMvc;
16
17// 测试正常场景:查询用户详情
18@Test
19@DisplayName("测试用户详情接口(正常场景)")
20public void testUserDetail() throws Exception{
21        mockMvc.perform(get("/user/1"))// 模拟GET请求,路径是/user/1
22.andExpect(status().isOk())// 断言状态码200
23.andExpect(jsonPath("$.code").value(200))// 断言返回code是200
24.andExpect(jsonPath("$.data.username").isNotEmpty());// 断言返回有用户名
25}
26
27// 测试异常场景:Token无效
28@Test
29@DisplayName("测试Token无效场景")
30publicvoidtestInvalidToken()throwsException{
31        mockMvc.perform(get("/user/info")
32.header("token","无效Token"))// 传入无效Token
33.andExpect(status().is(401))// 断言返回401未授权
34.andExpect(jsonPath("$.msg").value("Token无效,请重新登录"));
35}
36}

3. 关键点

  • 测试类上必须加@SpringBootTest,否则无法注入Service/Controller;

  • 断言时,用jsonPath定位返回字段,比如$.data.id就是获取返回结果里data对象的id字段;

  • 可以添加@BeforeEach注解,用于初始化测试数据,避免每次测试都重复写相同代码。

三、建议

  1. 日常联调:用Postman,快速定位问题,配合前端调整参数;

  2. 迭代维护:用JUnit5写自动化测试,每次代码修改后,运行测试用例,避免改坏旧功能;

  3. 重点关注:接口返回的状态码、参数格式,这两个是前后端联调最容易出问题的地方。

四、常见问题解决

  1. Postman请求成功,后端接收不到参数?------ 检查Content-Type是否为application/json,参数字段是否和后端实体类对应;

  2. JUnit测试报错"找不到Bean"?------ 测试类上必须加@SpringBootTest,否则无法注入Service;

  3. Token无效?------ 检查Token是否过期,或者请求头里的Token字段名是否和后端一致(比如后端用token,前端传成了Authorization)。

其实接口测试不用搞得太复杂,核心就是"日常联调用Postman提效,迭代维护用JUnit保质量",两者结合,既能快速联调,又能保证上线稳定。

相关推荐
yzx9910132 小时前
Java毕业设计实战:基于Spring Boot的在线图书管理系统(完整版)
java·spring boot·课程设计
yaaakaaang2 小时前
二、工厂方法模式
java·工厂方法模式
tumeng07112 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
深邃-2 小时前
字符函数和字符串函数(2)
c语言·数据结构·c++·后端·算法·restful
2601_949816352 小时前
解决报错net.sf.jsqlparser.statement.select.SelectBody
java
Seven972 小时前
MVC中的拦截器实现案例
java
尽兴-2 小时前
Elasticsearch 生产集群最佳实践:模板治理、ILM 生命周期与运维体系
java·运维·elasticsearch·容量规划·ccs·分片设计
大数据新鸟2 小时前
Java 泛型(Generic)完整使用指南
java·windows·python
難釋懷2 小时前
OpenResty基于ID负载均衡
junit·负载均衡·openresty