做后端开发,接口测试是绕不开的环节,既要保证接口能正常运行,又要应对前后端联调、线上稳定,所以今天就结合实际开发场景,来讲讲接口测试的方法。
做后端这么久,发现很多同学要么只靠Postman手动测试,要么不知道怎么用代码实现自动化测试,导致上线后容易出问题。其实接口测试就分两步:日常联调用Postman高效配合,迭代维护用JUnit自动化测试,两者结合才能既保证效率又守住质量。
先跟大家说清楚核心逻辑:Postman负责日常联调、快速定位问题,JUnit5负责自动化回归,避免每次迭代都要重复手动测试,这也是企业里最常用的搭配方式。
一、Postman 实战
Postman是我们日常开发中用得最多的工具,重点不是会用,而是用对技巧,提高联调效率,避免踩坑。
1. 环境隔离
做项目时,我们一般会有开发、测试、生产三个环境,每个环境的接口地址、参数可能不一样,要是每次都手动改地址,特别麻烦。所以第一步先配置环境变量:
-
新建环境(开发环境、测试环境、生产环境),每个环境里设置
baseUrl(比如开发环境是http://localhost:8080,测试环境是http://test.demo.com) -
接口地址统一用
{``{baseUrl}}/user这样的格式,切换环境时,不用改接口地址,直接切换环境即可,避免重复修改。
2. 带Token请求
现在大部分项目都需要登录验证,Postman里可以这样操作:
-
先调用登录接口,获取Token(一般在返回结果里);
-
在请求头里添加
token字段,值填获取到的Token; -
这样所有需要权限的接口,都会自动携带Token,不用每次都手动输入。
3. 实用技巧
-
发送JSON请求时,一定要选对
Content-Type为application/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注解,用于初始化测试数据,避免每次测试都重复写相同代码。
三、建议
-
日常联调:用Postman,快速定位问题,配合前端调整参数;
-
迭代维护:用JUnit5写自动化测试,每次代码修改后,运行测试用例,避免改坏旧功能;
-
重点关注:接口返回的状态码、参数格式,这两个是前后端联调最容易出问题的地方。
四、常见问题解决
-
Postman请求成功,后端接收不到参数?------ 检查
Content-Type是否为application/json,参数字段是否和后端实体类对应; -
JUnit测试报错"找不到Bean"?------ 测试类上必须加
@SpringBootTest,否则无法注入Service; -
Token无效?------ 检查Token是否过期,或者请求头里的Token字段名是否和后端一致(比如后端用
token,前端传成了Authorization)。
其实接口测试不用搞得太复杂,核心就是"日常联调用Postman提效,迭代维护用JUnit保质量",两者结合,既能快速联调,又能保证上线稳定。