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保质量",两者结合,既能快速联调,又能保证上线稳定。

相关推荐
曹牧26 分钟前
文档格式:OFD
java
豆角焖肉1 小时前
Maven进阶与搭建私服
java·maven
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab1 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活1 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
程序员天天困1 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn1 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull1 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai1 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器