接口测试总结
1、接口测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
2、接口测试一般分为上层服务对下层服务的接口调用,服务之间的接口调用以及系统与系统之间的接口调用
(1)上层服务对下层服务的接口调用:主要是controller层提供给view层的接口,涉及的是http协议接口
(2)服务层之间的相互调用:主要是model层提供给controller层的接口
(3)系统与系统之间的接口调用:如调用第三方登陆、支付接口
3、接口测试要点:
检查接口请求是否正确,返回数据的正确性与格式 【 比如:数据库的增删改查,当post接口操作完成后,通过列表页的接口查看新的数据是否与刚才post的数据一致;或者当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求】
(1) 检查接口入参的默认值、参数类型、非空校验、以及边界值【 比如:接口有翻页时,页码与页数的异常值测试 】
(2)检查接口的容错性,如传递数据的类型错误时是否可以处理
(3)所有功能都需要考虑兼容老版本,列表页的接口需考虑排序值
(4) 检查接口的性能以及安全性

4、接口测试意义:
(1)确保主要流程和系统稳定性
(2) 将bug控制在项目前期阶段
(3)缩短产品的研发周期
(4)检查服务器的异常处理能力
5、接口测试的完整流程:
需求评审:关注接口协议、方法、参数、返回码、业务逻辑、异常处理、权限、兼容性,提前提出设计风险;
用例设计:覆盖正常 / 异常 / 边界 / 参数组合 / 业务串联 / 幂等性;
测试准备:环境部署、测试数据构造、依赖服务 Mock;
执行测试:用 Postman/JMeter/Charles 调试,手工 + 自动化执行;
数据校验:SQL 核对数据库一致性;
缺陷跟踪:提交→复现→定位→回归→关闭;
测试报告:覆盖度、通过率、缺陷分布、遗留风险、上线建议。
6、接口测试用例设计:
从功能、异常、边界、参数、业务、兼容性6 维度设计
(1)正常场景:必填参数正确,业务流程通畅;
(2)异常场景:必填参数为空、格式错误、权限不足;
(3)边界值:参数长度、数值范围、字符类型边界;
(4)业务场景:多接口串联、上下游数据依赖;
(5)兼容性:不同协议、版本、环境下接口表现。
7、如何做接口数据一致性验证
接口请求后,用MySQL 复杂 SQL(联表、子查询)核对库中数据;
对比接口返回字段与数据库字段值、类型、长度一致;
大数据场景下,核对实时 / 离线数据、数仓层数据一致;
自动化脚本自动校验接口响应与数据库结果。
8、HTTP/HTTPS 接口常见状态码含义?幂等性怎么测试?
200 成功;201 创建成功;301/302 重定向;400 参数错误;401 未授权;403 禁止访问;404 不存在;405 方法不允许;500 服务错误;502 网关错误;504 超时。
幂等性测试:同一请求多次执行,结果与一次执行一致,如查询、删除、修改接口,防止重复提交导致数据异常。
9、接口压测时,如何定位系统瓶颈?怎么分析判断?
我按五层定位法,从外到内排查:
看指标:TPS 上不去、响应时间陡增、错误率上升→存在瓶颈;
看服务器:CPU≥80%、内存持续上涨、磁盘 IO 高→硬件 / 进程瓶颈;
看应用:线程池满、GC 频繁、死锁、日志大量报错→代码 / 框架瓶颈;
看数据库:慢查询、锁等待、连接池满、索引缺失→SQL / 库瓶颈;
看中间件:Redis/MySQL/Nginx 连接超时、限流→配置瓶颈。
10、接口mock测试
Mock 主要用于依赖第三方接口未开发完、下游服务不可用、需要模拟异常场景、第三方接口收费 / 限流时使用,我在项目中是这样落地 Mock 测试的:
(1)确定 Mock 场景
下游接口未开发、未联调
第三方接口(支付、短信、物流)不能真实调用
需要模拟特殊返回:超时、500、403、空数据、边界值
性能测试时隔离外部依赖
(2)常用 Mock 工具
Charles / Fiddler:本地弱网、打断点、修改返回值
Mockoon、EasyMock、Moco:独立搭建 Mock 服务
Python Flask/FastAPI:自己写轻量 Mock 接口
JMeter Mock:压测时固定返回
公司内部 Mock 平台:配置请求、返回、参数规则
(3)Mock 测试完整流程
梳理依赖接口、入参、出参、返回码
配置 Mock 服务,定义不同请求返回不同结果
测试端指向 Mock 地址,发起请求
验证业务逻辑是否能正确处理 Mock 返回
覆盖:正常返回、异常返回、空值、超时、报错
联调通过后再切回真实接口
(4)Mock 测试重点验证
系统是否能正确解析 Mock 数据结构
异常返回(500/404 / 空)是否有容错处理
边界值、极端场景是否不会崩溃
业务流程是否能正常流转
(5)Mock测试示例场景
你测订单提交,但支付接口是第三方(支付宝 / 微信),不能真扣钱,且支付接口还没联调完。
(5.1)确定被 Mock 接口
接口地址:/api/pay/create请求方式:POST
入参:orderId、amount、userId
期望返回:支付成功 / 失败 / 处理中
(5.2)用 EasyMock / Moco / Charles 构造 Mock 返回
示例 1:Mock 支付成功
json
{
"code": 200,
"msg": "支付成功",
"data": {
"orderId": "TEST_20250101001",
"payStatus": 1,
"payTime": "2025-01-01 12:00:00"
}
}
示例 2:Mock 支付失败
json
{
"code": 500,
"msg": "余额不足",
"data": null
}
示例 3:Mock 支付超时(异常场景)
json
{
"code": 504,
"msg": "支付网关超时",
"data": null
}
(5.3)把系统指向 Mock 地址
测试环境配置:
真实支付地址:https://支付.com/api/pay→ 改成:https://mock平台.com/api/pay
(5.4)开始测试(你测你的订单,调用的是 Mock)
创建订单 → 调用 Mock 支付
收到 Mock 返回的 “支付成功”
检查订单状态是否变为 已支付
检查数据库订单状态是否正确
再切换 Mock 返回 “失败 / 超时”,测异常处理
11、Python + FastAPI 快速手写轻量 Mock 服务,用来模拟
下游未开发接口
第三方接口(支付、短信、物流)
异常场景:500、超时、空数据、边界返回
(1)安装依赖
pip install fastapi uvicorn
(2)运行
from fastapi import FastAPI
import time
# 启动 Mock 服务
app = FastAPI(title="支付接口 Mock 服务")
# ======================
# Mock 1:支付成功接口
# ======================
@app.post("/api/pay/create")
def mock_pay_success(orderId: str, amount: float, userId: str):
# 模拟返回支付成功
return {
"code": 200,
"msg": "支付成功",
"data": {
"orderId": orderId,
"payStatus": 1, # 1=成功 2=失败
"payTime": "2025-01-01 12:00:00",
"amount": amount
}
}
# ======================
# Mock 2:支付失败(余额不足)
# ======================
@app.post("/api/pay/fail")
def mock_pay_fail():
return {
"code": 500,
"msg": "余额不足,支付失败",
"data": None
}
# ======================
# Mock 3:模拟超时(测试容错)
# ======================
@app.post("/api/pay/timeout")
def mock_pay_timeout():
time.sleep(10) # 延迟10秒,模拟超时
return {"code": 504, "msg": "网关超时"}
(3)启动服务
uvicorn mock_server:app --reload --port 8000
(4)mock地址
支付成功:http://127.0.0.1:8000/api/pay/create
支付失败:http://127.0.0.1:8000/api/pay/fail
支付超时:http://127.0.0.1:8000/api/pay/timeout
12、测试数据:
接口测试数据管理遵循 构造 → 隔离 → 复用 → 清理 四步策略
测试数据统一构造
用 SQL 脚本提前插入用户、订单、商品等基础数据
用 接口自动化前置用例 创建独立测试账号
用 参数化、UUID、时间戳 生成唯一数据(避免重复)
(2)测试数据严格隔离
测试环境、预发环境、线上环境完全隔离
测试账号统一前缀:test_xxx、auto_xxx
按用例、按模块、按人员隔离数据
公共数据(配置、字典):一次创建,多次复用
业务数据(订单、支付):用例独立,互不影响
避免用例之间依赖导致失败
自动化用例执行完自动删除 / 作废测试数据
定时任务清理过期测试数据
数据库加标记 is_test=1,批量清理
不使用真实手机号、身份证
敏感数据加密、脱敏
测试库禁止同步线上隐私数据
浙公网安备 33010602011771号