接口测试(一)
接口测试 - 介绍
- 定义
接口:系统和系统之间、模块和模块之间数据交互的通道
接口测试:测试这个通道的数据传输、逻辑、鉴权、异常、性能是否符合需求,不操作前端页面,直接调用接口
UI测试:模拟人操作页面;接口测试:直接调用后端接口,速度更快,更早发现bug
- 为什么做接口测试
- 更早发现bug ⭐️ 【提前介入测试】
前端页面还没开发完成时,后端接口开发完,就可以直接开展接口测试。
不用等页面!提前找到后端逻辑、数据库、参数校验类 bug。
Bug 发现越早,修复成本越低;等到 UI 阶段再发现,改代码成本更高。 - 接口文档,测试成本低
UI 依赖页面元素,前端改按钮、改样式,自动化脚本就会大面积失效。
接口是前后端约定好的数据交互协议,接口改动频率远低于页面。
接口自动化脚本稳定性更强,维护工作量小。 - 覆盖更全面,容易测到UI覆盖不到的场景
前端页面会做限制(比如输入框限制长度、禁止输入特殊字符),但前端限制可以绕过。
接口测试可以直接传非法参数,绕过前端校验,直接校验后端有没有做好防护。 - 性能、安全测试更容易实施
做性能压测、安全测试,直接调用接口,比模拟浏览器操作 UI 效率高得多。
大量并发请求,接口层面压测消耗资源更少。 - 方便做自动化,回归高效
项目迭代频繁,每次版本上线都要大量回归。
接口自动化执行速度快,批量运行,快速验证原有功能有没有被新代码破坏(回归测试)。 - 校验系统之间的交互
很多系统不是独立的,需要多个服务互相调用(例如:订单服务、支付服务)。
接口测试用来验证服务之间数据传递是否正常。 - 减少前端页面的干扰
UI 测试失败时,分不清是前端页面问题,还是后端接口返回数据错误。
接口测试直接单独验证后端,快速定位问题归属。
-
如何做接口测试
通过代码或接口测试工具进行接口测试
工具:postman、jemeter、apifox
代码:python + requests
抓包工具:fiddler、F12 -
具体情况
- 前台开发和后台开发是独立进行的,一个项目是由前后台组成,最终我们要进行前后台联调,这个时候我们就要使用接口,前后台联调前,我们需要对不同的接口测试。
- 第三方接口测试(比如:支付宝、微信支付)
如:自己的系统和其他系统合并
- 联调测试
联调 = 联合调试。
单个模块 / 接口开发完成后,先自测;多个模块、多个系统放在一起,测试模块之间互相调用、数据传递是否正常,就是联调测试。
简单一句话:
单个接口单独跑没问题,模块之间串起来跑一遍,看互相调用能不能正常工作。
举例子:
登录模块 → 用户模块 → 订单模块。
单独测登录接口、单独测下单接口都正常;联调就是:登录成功拿到 token,然后下单,查看订单数据正确传递。
- 其他情况 ☆☆☆
背景
对接方还没开发完成 / 外部系统(A 公司、B 公司)对接,拿不到真实接口
我们自己的代码、测试用例没法跑。
解决办法:模拟对方的接口,返回我们预设好的数据。
两个名词:Stub(桩)、Mock
一句话区分:
桩(Stub):开发写的,只返回固定数据,用来顶替依赖的接口。
Mock:范围更大,不仅返回数据,还能校验请求参数、判断调用次数。
-
桩 Stub(开发写桩)
- 什么是桩
当我们系统需要调用外部 B 系统接口,但是 B 还没做好。
开发写一个简单的接口(桩服务),代替 B 系统。不管我们发什么请求,桩直接返回写死的固定响应数据。
✅ 特点
- 一般后端开发写,代码简单,只负责返回预设结果
- 不校验你传过来的参数对不对,也不管调用多少次
- 只有固定返回:成功响应 / 失败响应
- 用途:让我方代码可以跑通流程,不用等对方开发完成
- 什么是桩
-
Mock(模拟服务,假接口)
Mock 是一个更大的概念,Mock 工具可以模拟外部接口。
市面上工具:Moco、WireMock、Apifox Mock、Postman Mock Server✅ 特点
- 可以根据不同请求参数,返回不同响应
- 可以校验:请求方法、请求头、入参是否正确
- 可以模拟各种场景:正常返回、超时、500 错误、401、异步任务
- 测试人员也能自己搭建,不一定需要开发写代码
- 可以快速切换场景:成功、失败、网络异常
-
对比
| 对比项 | Stub 桩 | Mock |
|---|---|---|
| 侧重点 | 返回预设数据,把流程跑通 | 校验请求 + 模拟多种返回场景 |
| 能力 | 弱,返回固定值,不校验入参 | 强,多场景、校验参数、模拟异常 |
| 谁来搭建 | 一般开发编码写 | 测试也可以用可视化工具快速搭建 |
| 适用 | 简单场景,只需要一个固定返回 | 接口测试,需要覆盖成功 / 失败 / 超时各种场景 |
-
工作场景选用
- 开发阶段,只是想把代码流程跑起来 → 开发写 Stub 桩
- 测试阶段,需要造各种异常场景(失败、超时)做接口测试 → Mock 服务
-
总结
当依赖的外部接口(别的系统 / 外部公司)尚未开发完成,我们无法调用真实接口。
Stub(桩)由开发编写,模拟依赖接口返回固定数据,保证自身业务流程可以跑通;
Mock 能力更强,不仅模拟返回数据,还可以校验请求参数,模拟成功、失败、超时等多种场景,用来测试我方系统的容错逻辑。
- 接口测试测什么 ⭐
- 功能测试(核心)
正常参数调用,校验返回数据、业务逻辑是否正确。
例如:新增用户、查询用户、停用用户。 - 参数校验
必填参数不传、传空、超长、特殊字符、错误类型,看接口是否合理拦截(返回对应提示)。 - 鉴权测试
不带 token、错误 token、过期 token、低权限账号访问高权限接口(401、403 场景)。 - 异常场景
重复提交、资源不存在、并发、数据冲突。 - HTTP 状态码 + 业务码校验
HTTP 状态码是网络层面;响应体内 code 是业务结果,两个都要断言。重点:HTTP 200 ≠ 业务成功!
- 其他
边界值、兼容性、性能、安全性(可选)
- 接口测试用例设计思路 ⭐️
- 正向用例:正确参数,正常调用,校验业务成功
- 必选参数:不传、传空字符串
- 参数类型错误:应该传数字,传字符串
- 参数边界:最大长度、最小值、最大值
- 非法参数:特殊符号、sql 注入字符
- 鉴权场景:无 token、错误 token、过期 token
- 权限场景:A 账号不能操作 B 账号数据
- 异步接口:提交任务,轮询查询任务状态,校验最终结果
❌️常见坑
- 只断言 HTTP 状态码,忘记校验业务 code,出现假通过
- Content-Type 不匹配,请求直接报错 415
- Token 过期没有处理,批量执行中途失败
- 异步接口只测提交接口,不轮询查任务结果,用例假成功
- 没有清理测试数据,多次执行产生脏数据
接口测试 - 网络基础【了解】
- 网络概念
网络是用于信息传输、交换、接收、资源共享的虚拟平台。把各个节点、线路连接在一起,实现资源共享。
例子:QQ 发送课件、接收作业,视频、文档共享。
- 网络四要素
- 独立计算机/终端装备:电脑、手机、服务器
- 通讯设备 + 通讯线路:路由器、光猫、光纤、网线、Wife、移动数据
- 网络通信协议:约定数据传输规则
- 资源共享:文件、数据可以互相收发
- 网络发展阶段
- 远程终端连接|60 年代初:早期大型机,类似 Xshell 远程连接 Linux
- 局域网 LAN|70 年代中期:校园网、公司内网,小范围联网
- 广域网 WAN|80 年代:跨城市、跨地区互联
- 信息高速阶段:光纤,多媒体(视频、大文件)高速传输
- 服务提供商分类
- ISP 网络业务提供商:提供网络带宽。电信、移动、联通、广电
- ICP 网络内容提供商:提供网站 / APP 内容。腾讯、抖音、新浪
- 网络分类
- 覆盖范围:局域网 LAN → 城域网 MAN → 广域网 WAN
- 拓扑结构:总线型、环型、星型、网状型(现在互联网核心是网状)
- 传输介质:有线网、无线网、光纤网
- TCP/IP 协议模型(⭐️)
国际标准 7 层 OSI 模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
国内常用 5 层简化模型:物理层、数据链路层、网络层、传输层、应用层
- TCP:传输控制协议
- IP:网际协议,负责寻址,找到目标机器
- HTTP 协议
HTTP:超文本传输协议,用于 Web 服务器把超文本传给浏览器。
- 默认端口:80
- 原理:客户端(浏览器)通过 URL 向服务端发起请求;服务端接收,返回响应信息。明文传输。
- HTTPS 协议
HTTPS = HTTP + SSL/TLS,安全超文本传输协议
传输过程会加密、解密,防止数据被抓包篡改、窃取。
- 默认端口:443
- HTTP 和 HTTPS 对比
- 端口:HTTP 80;HTTPS 443
- 传输:HTTP 明文;HTTPS 加密
- 性能:HTTP 更快;HTTPS 加密解密消耗服务器资源
- 安全性:HTTPS 更高
- TCP:三次握手、四次挥手(⭐️⭐️)
-
三次握手:建立 TCP 连接
- 客户端发 SYN 包(同步请求),等待服务端确认
- 服务端收到 SYN,回复 SYN+ACK:确认收到,同时向客户端发起同步请求
- 客户端收到 SYN+ACK,回复 ACK 确认。连接建立,开始传输数据
类比打电话:
甲:能听到吗?
乙:能听到,你能听到我吗?
甲:可以,我们开始通话。 -
四次挥手:断开 TCP 连接
- 主动关闭方发送 FIN:我不再发数据了(还能收数据)
- 被动方回复 ACK:收到关闭请求
- 被动方数据发送完毕,发送 FIN:我也没有数据要发了
- 主动方回复 ACK,连接正式关闭
- IP 与端口
一台主机端口范围:0 ~ 65535,一共 65536 个端口。
端口分类:
- 公认端口 0~1023:绑定固定服务
- HTTP:80,HTTPS:443,SSH(Xshell):22,MySQL:3306
- 注册端口 1024~49151:项目、应用自定义使用,例如 Tomcat:8080
- 动态 / 私有端口 49152~65535:客户端临时端口
其他常见端口:pop3:110,smtp:25(原文 21 是 ftp,笔误)
- 接口常用工具
- Fiddler:Windows 抓包、调试
- Charles:Mac 抓包工具
- Postman:接口调试、简单自动化
- Apifox:接口文档 + 调试 + Mock + 自动化一体化
- JMeter:接口性能测试
- 接口类型
- HTTP 接口(我们主要学习)
- RESTful 接口(基于 HTTP 规范风格)
- WebService 接口(xml 格式)
- RPC 接口(远程过程调用,如 Dubbo)
- RMI:Java 远程调用
- 接口测试 流程
- 【有接口文档】获取接口文档,没有文档就用 F12/Fiddler 抓包 | 【无接口文档】F12/Fiddler 抓包,提取接口信息
- 分析入参、出参,编写接口测试用例
- 用例评审
- 用例录入管理工具(禅道)
- 部署测试环境
- 使用工具 / 代码调试接口
- 发现 bug,禅道提交缺陷;开发修复,测试回归验证
- 输出接口测试报告
- 浏览器 F12(Fn+F12)抓包详解
打开开发者工具 → Network 面板,抓取请求。
-
General
- Request URL:请求地址
- Request Method:请求方法 GET/POST
- Status Code:HTTP 状态码
-
请求头 Request Headers(客户端发给服务器)
- Accept:客户端能接收的数据类型
- Accept-Encoding:支持的压缩格式 gzip
- Cookie:携带 Cookie,保存会话信息
- Host:目标主机 + 端口
- Content-Type:请求体的数据格式(非常关键)
-
响应头 Response Headers(服务器返回客户端)
- Content-Type:返回数据类型
- Content-Encoding:返回数据压缩方式
- Server:后端服务(nginx/tomcat)
- Date:响应时间
-
接口组成:
协议://IP:端口/资源路径
- GET 和 POST 区别
- GET 参数拼在 URL 地址栏;POST 参数放在请求 body 里
- GET 安全性弱;POST 相对更安全(仅仅是不在地址栏展示,不是加密)
- GET 传输数据量小;POST 支持更大数据
- HTTP 状态码汇总
- 1xx:信息类,请求已接收,继续操作
- 2xx:成功
- 200 OK:请求成功
- 201 Created:创建资源成功
- 204 No Content:成功无返回体
- 3xx:重定向
- 301:永久重定向
- 302:临时重定向
- 304:资源未修改,读取浏览器缓存
- 4xx:客户端错误
- 400 Bad Request:参数错误
- 401 Unauthorized:未登录 / 鉴权失败
- 403 Forbidden:登录成功,权限不足
- 404 Not Found:资源不存在
- 405 Method Not Allowed:请求方法不允许
- 415 Unsupported Media Type:媒体类型不支持(缺少 Content-Type)
- 408 Request Timeout:请求超时
- 5xx:服务端错误
- 500:服务器内部代码异常
- 502 Bad Gateway:网关错误
- 503 Service Unavailable:服务不可用,停机 / 过载
- 504 Gateway Timeout:网关超时

浙公网安备 33010602011771号