接口测试(一)

接口测试 - 介绍

  1. 定义
    接口:系统和系统之间、模块和模块之间数据交互的通道
    接口测试:测试这个通道的数据传输、逻辑、鉴权、异常、性能是否符合需求,不操作前端页面,直接调用接口

UI测试:模拟人操作页面;接口测试:直接调用后端接口,速度更快,更早发现bug

  1. 为什么做接口测试
  • 更早发现bug ⭐️ 【提前介入测试】
    前端页面还没开发完成时,后端接口开发完,就可以直接开展接口测试。
    不用等页面!提前找到后端逻辑、数据库、参数校验类 bug。
    Bug 发现越早,修复成本越低;等到 UI 阶段再发现,改代码成本更高。
  • 接口文档,测试成本低
    UI 依赖页面元素,前端改按钮、改样式,自动化脚本就会大面积失效。
    接口是前后端约定好的数据交互协议,接口改动频率远低于页面。
    接口自动化脚本稳定性更强,维护工作量小。
  • 覆盖更全面,容易测到UI覆盖不到的场景
    前端页面会做限制(比如输入框限制长度、禁止输入特殊字符),但前端限制可以绕过。
    接口测试可以直接传非法参数,绕过前端校验,直接校验后端有没有做好防护。
  • 性能、安全测试更容易实施
    做性能压测、安全测试,直接调用接口,比模拟浏览器操作 UI 效率高得多。
    大量并发请求,接口层面压测消耗资源更少。
  • 方便做自动化,回归高效
    项目迭代频繁,每次版本上线都要大量回归。
    接口自动化执行速度快,批量运行,快速验证原有功能有没有被新代码破坏(回归测试)。
  • 校验系统之间的交互
    很多系统不是独立的,需要多个服务互相调用(例如:订单服务、支付服务)。
    接口测试用来验证服务之间数据传递是否正常。
  • 减少前端页面的干扰
    UI 测试失败时,分不清是前端页面问题,还是后端接口返回数据错误。
    接口测试直接单独验证后端,快速定位问题归属。
  1. 如何做接口测试
    通过代码或接口测试工具进行接口测试
    工具:postman、jemeter、apifox
    代码:python + requests
    抓包工具:fiddler、F12

  2. 具体情况

  • 前台开发和后台开发是独立进行的,一个项目是由前后台组成,最终我们要进行前后台联调,这个时候我们就要使用接口,前后台联调前,我们需要对不同的接口测试。
  • 第三方接口测试(比如:支付宝、微信支付)
    如:自己的系统和其他系统合并
  1. 联调测试
    联调 = 联合调试。
    单个模块 / 接口开发完成后,先自测;多个模块、多个系统放在一起,测试模块之间互相调用、数据传递是否正常,就是联调测试。

简单一句话:
单个接口单独跑没问题,模块之间串起来跑一遍,看互相调用能不能正常工作。

举例子:
登录模块 → 用户模块 → 订单模块。
单独测登录接口、单独测下单接口都正常;联调就是:登录成功拿到 token,然后下单,查看订单数据正确传递。

  1. 其他情况 ☆☆☆
    背景
    对接方还没开发完成 / 外部系统(A 公司、B 公司)对接,拿不到真实接口
    我们自己的代码、测试用例没法跑。
    解决办法:模拟对方的接口,返回我们预设好的数据。
    两个名词:Stub(桩)、Mock

一句话区分:
桩(Stub):开发写的,只返回固定数据,用来顶替依赖的接口。
Mock:范围更大,不仅返回数据,还能校验请求参数、判断调用次数。

  • 桩 Stub(开发写桩)

    • 什么是桩
      当我们系统需要调用外部 B 系统接口,但是 B 还没做好。
      开发写一个简单的接口(桩服务),代替 B 系统。不管我们发什么请求,桩直接返回写死的固定响应数据。
      ✅ 特点
    1. 一般后端开发写,代码简单,只负责返回预设结果
    2. 不校验你传过来的参数对不对,也不管调用多少次
    3. 只有固定返回:成功响应 / 失败响应
    4. 用途:让我方代码可以跑通流程,不用等对方开发完成
  • Mock(模拟服务,假接口)
    Mock 是一个更大的概念,Mock 工具可以模拟外部接口。
    市面上工具:Moco、WireMock、Apifox Mock、Postman Mock Server

    ✅ 特点

    1. 可以根据不同请求参数,返回不同响应
    2. 可以校验:请求方法、请求头、入参是否正确
    3. 可以模拟各种场景:正常返回、超时、500 错误、401、异步任务
    4. 测试人员也能自己搭建,不一定需要开发写代码
    5. 可以快速切换场景:成功、失败、网络异常
  • 对比

对比项 Stub 桩 Mock
侧重点 返回预设数据,把流程跑通 校验请求 + 模拟多种返回场景
能力 弱,返回固定值,不校验入参 强,多场景、校验参数、模拟异常
谁来搭建 一般开发编码写 测试也可以用可视化工具快速搭建
适用 简单场景,只需要一个固定返回 接口测试,需要覆盖成功 / 失败 / 超时各种场景
  • 工作场景选用

    • 开发阶段,只是想把代码流程跑起来 → 开发写 Stub 桩
    • 测试阶段,需要造各种异常场景(失败、超时)做接口测试 → Mock 服务
  • 总结
    当依赖的外部接口(别的系统 / 外部公司)尚未开发完成,我们无法调用真实接口。
    Stub(桩)由开发编写,模拟依赖接口返回固定数据,保证自身业务流程可以跑通;
    Mock 能力更强,不仅模拟返回数据,还可以校验请求参数,模拟成功、失败、超时等多种场景,用来测试我方系统的容错逻辑。

  1. 接口测试测什么 ⭐
  • 功能测试(核心)
    正常参数调用,校验返回数据、业务逻辑是否正确。
    例如:新增用户、查询用户、停用用户。
  • 参数校验
    必填参数不传、传空、超长、特殊字符、错误类型,看接口是否合理拦截(返回对应提示)。
  • 鉴权测试
    不带 token、错误 token、过期 token、低权限账号访问高权限接口(401、403 场景)。
  • 异常场景
    重复提交、资源不存在、并发、数据冲突。
  • HTTP 状态码 + 业务码校验
    HTTP 状态码是网络层面;响应体内 code 是业务结果,两个都要断言。

    重点:HTTP 200 ≠ 业务成功!

  • 其他
    边界值、兼容性、性能、安全性(可选)
  1. 接口测试用例设计思路 ⭐️
  • 正向用例:正确参数,正常调用,校验业务成功
  • 必选参数:不传、传空字符串
  • 参数类型错误:应该传数字,传字符串
  • 参数边界:最大长度、最小值、最大值
  • 非法参数:特殊符号、sql 注入字符
  • 鉴权场景:无 token、错误 token、过期 token
  • 权限场景:A 账号不能操作 B 账号数据
  • 异步接口:提交任务,轮询查询任务状态,校验最终结果

❌️常见坑

  1. 只断言 HTTP 状态码,忘记校验业务 code,出现假通过
  2. Content-Type 不匹配,请求直接报错 415
  3. Token 过期没有处理,批量执行中途失败
  4. 异步接口只测提交接口,不轮询查任务结果,用例假成功
  5. 没有清理测试数据,多次执行产生脏数据

接口测试 - 网络基础【了解】

  1. 网络概念
    网络是用于信息传输、交换、接收、资源共享的虚拟平台。把各个节点、线路连接在一起,实现资源共享。

例子:QQ 发送课件、接收作业,视频、文档共享。

  1. 网络四要素
  • 独立计算机/终端装备:电脑、手机、服务器
  • 通讯设备 + 通讯线路:路由器、光猫、光纤、网线、Wife、移动数据
  • 网络通信协议:约定数据传输规则
  • 资源共享:文件、数据可以互相收发
  1. 网络发展阶段
  • 远程终端连接|60 年代初:早期大型机,类似 Xshell 远程连接 Linux
  • 局域网 LAN|70 年代中期:校园网、公司内网,小范围联网
  • 广域网 WAN|80 年代:跨城市、跨地区互联
  • 信息高速阶段:光纤,多媒体(视频、大文件)高速传输
  1. 服务提供商分类
  • ISP 网络业务提供商:提供网络带宽。电信、移动、联通、广电
  • ICP 网络内容提供商:提供网站 / APP 内容。腾讯、抖音、新浪
  1. 网络分类
  • 覆盖范围:局域网 LAN → 城域网 MAN → 广域网 WAN
  • 拓扑结构:总线型、环型、星型、网状型(现在互联网核心是网状)
  • 传输介质:有线网、无线网、光纤网
  1. TCP/IP 协议模型(⭐️)

国际标准 7 层 OSI 模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
国内常用 5 层简化模型:物理层、数据链路层、网络层、传输层、应用层

  • TCP:传输控制协议
  • IP:网际协议,负责寻址,找到目标机器
  1. HTTP 协议
    HTTP:超文本传输协议,用于 Web 服务器把超文本传给浏览器。
  • 默认端口:80
  • 原理:客户端(浏览器)通过 URL 向服务端发起请求;服务端接收,返回响应信息。明文传输。
  1. HTTPS 协议
    HTTPS = HTTP + SSL/TLS,安全超文本传输协议
    传输过程会加密、解密,防止数据被抓包篡改、窃取。
  • 默认端口:443
  1. HTTP 和 HTTPS 对比
  • 端口:HTTP 80;HTTPS 443
  • 传输:HTTP 明文;HTTPS 加密
  • 性能:HTTP 更快;HTTPS 加密解密消耗服务器资源
  • 安全性:HTTPS 更高
  1. TCP:三次握手、四次挥手(⭐️⭐️)
  • 三次握手:建立 TCP 连接

    1. 客户端发 SYN 包(同步请求),等待服务端确认
    2. 服务端收到 SYN,回复 SYN+ACK:确认收到,同时向客户端发起同步请求
    3. 客户端收到 SYN+ACK,回复 ACK 确认。连接建立,开始传输数据

    类比打电话:
    甲:能听到吗?
    乙:能听到,你能听到我吗?
    甲:可以,我们开始通话。

  • 四次挥手:断开 TCP 连接

    1. 主动关闭方发送 FIN:我不再发数据了(还能收数据)
    2. 被动方回复 ACK:收到关闭请求
    3. 被动方数据发送完毕,发送 FIN:我也没有数据要发了
    4. 主动方回复 ACK,连接正式关闭
  1. 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,笔误)

  1. 接口常用工具
  • Fiddler:Windows 抓包、调试
  • Charles:Mac 抓包工具
  • Postman:接口调试、简单自动化
  • Apifox:接口文档 + 调试 + Mock + 自动化一体化
  • JMeter:接口性能测试
  1. 接口类型
  • HTTP 接口(我们主要学习)
  • RESTful 接口(基于 HTTP 规范风格)
  • WebService 接口(xml 格式)
  • RPC 接口(远程过程调用,如 Dubbo)
  • RMI:Java 远程调用
  1. 接口测试 流程
  • 【有接口文档】获取接口文档,没有文档就用 F12/Fiddler 抓包 | 【无接口文档】F12/Fiddler 抓包,提取接口信息
  • 分析入参、出参,编写接口测试用例
  • 用例评审
  • 用例录入管理工具(禅道)
  • 部署测试环境
  • 使用工具 / 代码调试接口
  • 发现 bug,禅道提交缺陷;开发修复,测试回归验证
  • 输出接口测试报告
  1. 浏览器 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:端口/资源路径

  1. GET 和 POST 区别
  • GET 参数拼在 URL 地址栏;POST 参数放在请求 body 里
  • GET 安全性弱;POST 相对更安全(仅仅是不在地址栏展示,不是加密)
  • GET 传输数据量小;POST 支持更大数据
  1. 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:网关超时
posted @ 2026-10-12 17:43  一只鹿吖  阅读(9)  评论(0)    收藏  举报