接口测试面试题¶
接口测试面试重点通常包括 HTTP 基础、接口用例设计、鉴权、断言、数据校验和异常场景。
GET 和 POST 有什么区别?¶
推荐回答:
GET:通常用于查询,参数放在 URL Query 中
POST:通常用于创建或提交数据,参数放在请求体中
从测试角度看:
- 不能只按方法判断业务含义,还要看接口设计文档
- GET 请求也要验证参数校验、权限和分页
- POST 请求要重点验证必填字段、重复提交和数据落库
不要绝对化地说"GET 一定没有请求体""POST 一定安全"。实际项目里要看实现和规范。
接口测试怎么设计用例?¶
可以从这些角度回答:
- 正常参数
- 必填参数为空
- 参数类型错误
- 参数长度边界
- 枚举值非法
- 未登录、登录过期、权限不足
- 重复提交和幂等
- 数据库落库校验
- 错误信息是否合理
示例回答:
HTTP 状态码 200 是否代表接口成功?¶
推荐回答:
不一定。HTTP 200 只能说明 HTTP 请求正常返回。
业务是否成功还要看:
- 业务码(code 字段)
- 响应字段
- 数据变化
有些系统业务失败也返回 200,比如 code 为 1001 表示参数错误。
接口断言建议:
- HTTP 状态码
- 业务码
- 响应字段
- 数据库或缓存变化
- 响应时间
token 过期怎么测试?¶
可以这样回答:
准备 4 种 token 分别请求需要登录的接口:
1. 有效 token → 预期可以访问
2. 过期 token → 预期返回 401 或业务未登录错误
3. 伪造 token → 预期拒绝访问
4. 空 token → 预期拒绝访问
重点:任何情况都不能返回敏感数据。
接口自动化断言怎么写?¶
示例:
assert response.status_code == 200
body = response.json()
assert body["code"] == 0
assert body["data"]["orderStatus"] == "PAID"
更完整的回答:
接口测试发现前后端问题怎么定位?¶
回答思路:
排查步骤:
1. 看请求是否正确(URL、方法、Header、参数、token)
→ 请求不正确 → 前端传参问题
2. 请求正确但响应错误 → 看后端日志、数据库数据
3. 接口数据正确但页面展示错误 → 前端渲染或字段映射问题
面试自查¶
- 是否能说清楚 HTTP 状态码和业务码区别
- 是否能设计异常参数
- 是否知道鉴权和越权测试
- 是否能结合数据库校验说明接口正确性
RESTful API 的设计规范了解吗?¶
RESTful 是一种接口设计风格,核心原则:
1. 资源用名词表示
/users、/orders ✅
/getUsers ❌
2. 用 HTTP 方法表示操作
GET 查询、POST 创建、PUT 全量更新、PATCH 部分更新、DELETE 删除
3. 状态码语义化
201 创建成功、204 删除成功、404 资源不存在
4. 版本号放在 URL 或 Header 中
/api/v1/users
测试关注:接口是否遵循规范、URL 是否语义化、状态码是否正确。
接口依赖怎么处理?¶
比如下单接口依赖登录接口返回的 token,支付接口依赖下单接口返回的订单号。
处理方式:
1. 用例之间共享数据:登录后保存 token,后续用例自动携带
2. 前置请求:在用例执行前先调用依赖接口获取数据
3. 数据库直取:直接从数据库查需要的数据(适合稳定的测试数据)
4. Mock:用 Mock 服务模拟依赖接口的返回
怎么测试接口的幂等性?¶
幂等性 = 同一个请求调用多次,结果和调用一次一样
测试方法:用同一个请求参数连续调用 2-3 次,检查:
- 数据是否只创建一条(不是重复创建)
- 状态是否保持一致
- 是否返回合理的提示(如"订单已存在")
重点测:支付回调、订单创建、退款接口
接口超时怎么测试?¶
1. 正常超时:设置合理的超时时间(如 5 秒),模拟接口响应超过 5 秒,检查客户端是否正确处理
2. 边界:刚好在超时时间返回,检查是否正常处理
3. 重试机制:超时后是否有重试,重试次数是否合理
4. 幂等:超时后重试是否会导致重复操作
Mock 和挡板有什么区别?¶
Mock:在测试侧模拟接口返回
- 场景:被测系统依赖的第三方服务不可用时
- 工具:Postman Mock Server、WireMock、responses 库
挡板:在服务侧模拟下游服务
- 场景:压测时隔离外部依赖
测试中常用 Mock:比如支付接口用 Mock 返回成功/失败,不需要真实调用支付平台。
接口测试和 UI 测试怎么分配?¶
遵循测试金字塔:
接口层:覆盖大部分业务逻辑验证(70-80%)
→ 成本低、速度快、稳定性高
UI 层:只覆盖核心用户路径(10-20%)
→ 成本高、速度慢、容易因页面变化失败
单元测试:由开发负责(覆盖底层逻辑)
所以:复杂数据校验、边界值、异常场景放接口层,只在 UI 层验证用户可见的交互流程。
接口测试中如何处理加密参数?¶
常见加密方式:MD5、AES、RSA、Base64、Token 签名
处理步骤:
1. 先看接口文档,确认加密规则
2. 签名类参数:按规则排序、拼接、加密生成签名
3. Token/登录态:先调登录接口获取 Token,放到 Header 或参数中
4. 在 Postman 或 Python 脚本中写好加密函数,自动生成
举例(MD5 签名):
参数按字母排序 → 拼接成字符串 → 加密 → 和签名参数对比
sign = MD5("app_id=xxx×tamp=xxx&key=secret")
面试评分参考¶
| 维度 | 初级(1-2年) | 中级(3-5年) |
|---|---|---|
| HTTP 基础 | 知道方法、状态码、Header | 能解释鉴权、跨域、缓存 |
| 用例设计 | 能设计正常+异常用例 | 能考虑幂等、并发、数据一致性 |
| 工具使用 | 会用 Postman 发请求 | 能搭自动化框架、CI 集成 |
| 问题定位 | 能用抓包看请求响应 | 能从前端→接口→后端→数据库逐层定位 |