接口测试总结

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测试示例场景

你测订单提交,但支付接口是第三方(支付宝 / 微信),不能真扣钱,且支付接口还没联调完。

 必须 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_xxxauto_xxx

按用例、按模块、按人员隔离数据

(3)数据复用与独立

公共数据(配置、字典):一次创建,多次复用

业务数据(订单、支付):用例独立,互不影响

避免用例之间依赖导致失败

(4)测试数据自动清理

自动化用例执行完自动删除 / 作废测试数据

定时任务清理过期测试数据

数据库加标记 is_test=1,批量清理

(5)数据安全

不使用真实手机号、身份证

敏感数据加密、脱敏

测试库禁止同步线上隐私数据

posted @ 2018-12-21 16:12  ReturnHome  阅读(266)  评论(0)    收藏  举报