第三阶段——API接口自动化(HTTP)

发布时间:2026/7/16 3:46:51

第三阶段——API接口自动化(HTTP) 一 HTTP协议WEB API接口 大都是基于 HTTP 协议。HTTPHyperText Transfer Protocol超文本传输协议是互联网上应用最为广泛的通信协议用于客户端通常是浏览器与服务器之间的数据交换。它采用请求-响应模型属于无状态协议通过URL统一资源定位符定位资源。HTTP协议栈架构​HTTP的请求-响应模型时序图展示了一次完整的 HTTP 请求-响应交互流程涵盖 DNS 解析、TCP/TLS 握手、HTTP 请求发送、服务器处理以及响应返回的全过程一次典型 HTTP 请求的完整生命周期浏览器首先进行 DNS 解析获取服务器 IP然后通过 TCP 三次握手现代连接还包含 TLS 加密握手建立可靠连接再发送 HTTP 请求服务器处理后返回 HTTP 响应。HTTP版本特性HTTP3 以前版本 除了HTTP3 , 都是基于 TCP 协议的 所以要进行通讯客户端 必须先 和服务端 创建 TCP 连接。而且 HTTP 双方的信息交互必须是这样一种方式客户端 先发送 http请求request给 服务端然后服务端 发送 http响应response给 客户端特别注意HTTP协议中服务端不能主动先发送信息给 客户端。而且在1.1 以前的版本 服务端 返回响应给客户端后连接就会 断开 下一次双方要进行信息交流必须重复上面的过程重新建立连接客户端发送请求服务返回响应。到了 1.1 版本 建立连接后这个连接可以保持一段时间keep alive 这段时间双方可以多次进行 请求和响应 无需重新建立连接。HTTP/1.1HTTP/1.1 是使用最广泛的版本。它采用纯文本格式传输数据每次请求-响应要么独占一个 TCP 连接要么通过Connection: keep-alive在同一连接上串行发送多个请求。核心问题队头阻塞Head-of-Line Blocking前一个请求的响应未返回时后续请求必须等待即使它们互不依赖Pipeline 效果不佳虽然有 HTTP Pipelining 机制可以批量发送请求但由于中间代理不支持等原因实际部署中几乎未被使用头部冗余每个请求/响应都携带完整的首部字段大量重复的 Cookie、User-Agent 等造成浪费HTTP/2HTTP/2 引入了二进制分帧层将通信的基本单位从文本消息变为帧Frame同一连接上可并发多个流Stream实现了真正的多路复用。关键改进多路复用单 TCP 连接上并行交错发送多个请求/响应消除了 HTTP 层的队头阻塞HPACK 头部压缩用静态表动态哈夫曼编码压缩首部大幅减少冗余服务器推送服务器可主动推送客户端可能需要的资源如 CSS、JS流优先级客户端可设置流的权重和依赖关系优化关键资源加载但 HTTP/2 仍运行在 TCP 上TCP 层的队头阻塞依然存在——一旦一个 TCP 包丢失该连接上所有流都会被阻塞等待重传。HTTP/3HTTP/3 彻底抛弃 TCP基于Google 开发并由 IETF 标准化的QUIC 协议运行在UDP之上是当前最新的 HTTP 版本。它解决了 TCP 诞生半个世纪以来遗留的队头阻塞和握手延迟两大难题特别适合弱网环境和高并发场景。核心优势彻底消除队头阻塞QUIC 为每个流独立处理丢包恢复一个流的包丢失不影响其他流更快的连接建立QUIC 将传输层与 TLS 1.3 集成首次连接只需1-RTT重连可做到0-RTT连接迁移基于连接 ID而非四元组标识连接用户从 Wi-Fi 切换到 4G/5G 时连接不断开用户态实现QUIC 在用户空间实现无需修改内核即可快速迭代升级HTTP核心机制请求方法方法用途是否有请求体GET获取资源否POST提交数据/创建资源是PUT全量替换资源是PATCH局部更新资源是DELETE删除资源否HEAD获取响应头无响应体否OPTIONS查询支持的方法CORS 预检否状态码分类类别范围含义1xx100-199信息性如 101 Switching Protocols2xx200-299成功200 OK、201 Created、204 No Content3xx300-399重定向301 永久、302 临时、304 未修改4xx400-499客户端错误400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found5xx500-599服务器错误500 Internal Server Error、502 Bad Gateway、503 Service UnavailableHTTP 首部Headers首部分为四类通用首部Cache-Control、Connection、Date、Transfer-Encoding等对请求和响应都适用请求首部Host、User-Agent、Accept、Authorization、Cookie等响应首部Server、Set-Cookie、Location、Content-Type、ETag等实体首部Content-Length、Content-Encoding、Last-Modified等缓存机制HTTP 缓存是性能优化的核心手段分为两种策略强缓存通过Cache-Control: max-age31536000或Expires控制在有效期内直接使用本地缓存不发请求到服务器协商缓存过期后通过ETag/If-None-Match或Last-Modified/If-Modified-Since向服务器验证资源是否有更新若未修改返回304 Not Modified节省带宽HTTPSHTTP SecureHTTPS HTTP TLSTransport Layer Security通过在传输层对数据进行加密解决机密性加密数据防止窃听完整性防止数据被篡改身份认证通过 CA 证书验证服务器身份防止中间人攻击TLS 1.3RFC 8446是当前最新版本将握手缩减到 1-RTT并移除了许多不安全的旧加密套件。二 查看浏览器的HTTP消息F12FnEsc——点击网络Nnetwork即可查看三 HTTP请求—响应消息结构请求消息结构http请求消息的示例GET /mgr/login.html HTTP/1.1 Host: www.baiyueheiyu.com User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT) Accept-Language: zh-cn Accept-Encoding: gzip, deflatePOST /api/medicine HTTP/1.1 Host: www.baiyueheiyu.com User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT) Content-Type: application/x-www-form-urlencoded Content-Length: 51 Accept-Language: zh-cn Accept-Encoding: gzip, deflate nameqingmeisusn099877883837descqingmeisuyaopin请求行http请求的第一行的内容表示要操作什么资源使用的 http协议版本是什么。包含3部分信息 请求的方法操作资源的地址 协议的版本号例如GET /mgr/login.html HTTP/1.1表示要获取资源 资源的地址URL是/mgr/login.html 使用的协议是HTTP/1.1而POST /api/medicine HTTP/1.1表示添加资源信息 添加资源 到 地址/api/medicine 使用的协议是HTTP/1.1URL参数比如https://www.baidu.com/s?wdiphonersv_spt1问号后面的部分wdiphonersv_spt1就是 url 参数每个参数之间是用隔开的。请求头 request headers请求头即请求首部Host、User-Agent、Accept、Authorization、Cookie等比如请求发送的服务端域名是什么 希望接收的响应消息使用什么语言请求消息体的长度等等。HTTP协议规定了一些标准的请求头点击查看MDN的描述开发者也可以在HTTP消息中 添加自己定义的请求头消息体 message body请求的url、请求头中可以存放一些数据信息 但是有些数据信息往往需要存放在消息体中。特别是 POST、PUT等请求添加、修改的数据信息 通常都是 存放在请求消息体中的。如果 HTTP 请求 有 消息体 协议规定需要在消息头和消息体之间插入一个空行 隔开 它们。请求消息体中保存了要提交给服务端的数据信息。比如客户端要上传一个文件给服务端就可以通过HTTP请求发送文件数据给服务端。文件的数据 就应该在请求的消息体中。再比如上面示例中 客户端要添加药品药品的名称、编码、描述就存放在请求消息体中。WEB API 请求消息体 通常是某种格式的文本常见的有开发决定格式JsonXmlwww-form-urlencodedHTTP响应消息http响应消息的示例HTTP/1.1 200 OK Date: Thu, 19 Sep 2019 08:08:27 GMT Server: WSGIServer/0.2 CPython/3.7.3 Content-Type: application/json Content-Length: 37 X-Frame-Options: SAMEORIGIN Vary: Cookie {ret: 0, retlist: [], total: 0}状态行 status line状态行在第一行包含3个部分协议版本上面的示例中就是HTTP/1.1状态码上面的示例中就是200描述状态的短语上面的示例中就是OK状态码它表示了服务端对客户端请求的处理结果。见上文状态码分类部分状态码用3位的数字来表示第一位 的 数字代表 处理结果的 大体类型常见的有如下几种• 2xx通常 表示请求消息 没有问题而且 服务器 也正确处理了最常见的就是 200• 3xx这是重定向响应常见的值是 301302 表示客户端的这个请求的url地址已经改变了 需要 客户端 重新发起一个 请求 到另外的一个url。• 4xx表示客户端请求有错误 常见的值有400 Bad Request表示客户端请求不符合接口要求比如格式完全错误401 Unauthorized表示客户端需要先认证才能发送次请求403 Forbidden表示客户端没有权限要求服务器处理这样的请求 比如普通用户请求删除别人账号等404 Not Found表示客户端请求的url 不存在• 5xx表示服务端在处理请求中发生了未知的错误。通常是服务端的代码设计问题或者是服务端子系统出了故障比如数据库服务宕机了响应头 response headers响应头 是 响应状态行下面的 的内容里面存放 一些 信息。 作用 和 格式 与请求头类似消息体 message body如果 HTTP 响应 有 消息体 协议规定 需要在 消息头和消息体 之间 插入一个空行 隔开 它们。浏览器地址栏 输入 登录网址浏览器 请求一个登录网页的内容网站服务器就在响应的消息体中存放登录网页的html内容。和请求消息体一样WEB API 响应消息体 通常也是某种格式的文本常见的有JsonXmlwww-form-urlencoded接口测试或者API接口测试其实就是对软件系统消息交互接口的测试不通过前端 UI而是直接调用接口检验输入/输出、逻辑正确性和异常处理。消息交互接口 是软件系统 和其他软件系统交互的那部分。比如淘宝闪购APP和淘宝后端服务器接口测试就是依据接口规范写出测试用例使用软件工具直接通过消息接口 对 被测系统 进行消息收发验证被测系统行为是否正确。接口测试通常是对 服务端做的 比较多但是也有对客户端做的。关键是看 被测系统是 服务端还是客户端。HTTP协议的特点是客户端发出一个HTTP请求给 服务端服务端就返回一个HTTP响应。好像程序的API调用。所以 接口测试 通常又被称之为API接口测试或者WEB API接口测试消息接口HTTP/REST 占据绝对主流目前软件系统之间的消息接口绝大部分是基于 HTTP/HTTPS 协议尤其是 REST 风格 API。系统间接口大多采用 HTTP 协议RESTful API基于 HTTP 的GET/POST/PUT/DELETE等方法以 JSON 作为主流数据格式是微服务、前后端分离、SaaS 集成的标准方案GraphQL通常也运行在 HTTP 之上通过POST请求发送查询WebSocket虽然基于 TCP但先通过 HTTP 握手升级常用于实时推送场景HTTP 成为主流的原因很简单简单、通用、跨平台、穿透性强。防火墙、NAT、负载均衡、网关、CDN 对 HTTP 都原生支持调试工具curl/Postman丰富文档生OpenAPI/Swagger成熟。高性能场景下的 gRPC在微服务内部通信或高性能 RPC 场景gRPC基于 HTTP/2 Protocol Buffers近年来增长迅速二进制序列化Protobuf比 JSON 更高效HTTP/2 多路复用减少连接开销支持流式通信双向流主流云厂商和 Kubernetes 生态原生支持但 gRPC 对浏览器和某些防火墙/代理不够友好需要 HTTP/2 支持且 Protobuf 二进制内容调试不便所以多用于服务端内部调用对外暴露仍以 HTTP/REST 为主。场景主流协议占比趋势对外 API / 前后端交互HTTP/REST (JSON)绝对主流微服务内部高性能调用gRPC (HTTP/2)快速增长异步解耦 / 事件驱动消息队列Kafka/RocketMQ/AMQP稳定实时双向通信WebSocket基于 HTTP 升级特定场景API接口传递数据信息是通过HTTP协议进行收发的 网站获取网页、图片 、css等资源 也是 通过HTTP协议进行收发的 。网页、图片、css 这些资源都是静态资源 就是一个个文件存储在服务器上的获取这些信息服务端直接读取文件返回给客户端即可无需特别的数据处理。--不称为接口消息而API接口请求消息通常都需要 服务端程序进行 一番处理比如对请求的权限检查从数据库中读出数据进行信息过滤和 格式转换最后在HTTP响应中返回给客户端。接口测试需要工具和 被测系统之间进行消息通常是HTTP消息的收发 这个工具 可以是 别人开发 好的 也可以自己开发。基于 HTTP 的接口测试工具 常见的 有Postman、Jmeter等工具特点适用场景Postman可视化、支持环境变量、Collection 共享、脚本断言手工测试、快速调试、团队协作Apifox国产工具集 API 设计、文档、Mock、测试于一体国内团队一站式 API 平台JMeter支持压测、分布式执行、Java 扩展性能测试 接口功能测试cURL命令行工具轻量灵活适合 CI/CD 脚本自动化流水线、快速调试Python pytest requests代码级自动化灵活度高大规模自动化测试、数据驱动测试REST Assured (Java)Java 生态与 Spring Boot 等无缝集成Java 项目后端测试Hoppscotch开源、轻量、Web 版 Postman 替代轻量在线调试这些工具核心功能都是类似的都是用来构建HTTP请求消息并且解析收到的HTTP响应消息 用户来判断是否符合预期熟悉 Python 语言的朋友 也完全可以使用 requests 库自己写代码发送接收HTTP请求进行测试。测试工程师测试系统一定要做接口测试吗这个要看你们系统被测的接口 是内部接口还是外部接口内部接口是 产品也就是被测系统内部子系统之间的接口。内部接口通常并不需要 测试部门的工程师 进行大量的测试 主要由开发人员自己进行测试的。测试人员做内部API的接口测试重点是做漏洞测试和破坏性测试。比如 用普通账号登录去调用管理员才能使用的API接口比如删除系统中的某个订单。如果我们只通过前端UI是没法发送这样的请求的因为前端的代码会保证 普通用户登录后 没有可以删除订单的操作界面。而 产品也就是被测系统 的外部接口是和 另外的系统 交互的接口。 所谓 另外的系统 通常是由 其他公司 开发的 这样的接口 测试工程师一定要进行测试。比如 阿里云服务提供的 API 接口 微信支付系统提供 的支付 API 接口 作为 阿里云 或者 微信支付 的测试工程师就当然要对其进行测试了。四 接口测试工作接口测试是现代软件测试体系中投入产出比最高的环节之一——它发现 Bug 快、维护成本低、自动化程度高是微服务架构下质量保障的基石。接口测试工作主要包括获取接口文档评审文档了解接口的实现细节根据接口文档写出测试用例等产品发布后根据测试用例使用软件工具直接通过消息接口 对 被测系统 进行消息收发验证被测系统行为是否正确接口测试的关键原则独立于前端不依赖 UI直接测试后端逻辑更早发现缺陷数据驱动用参数化pytest.mark.parametrize、Postman 数据文件批量覆盖多组输入环境隔离测试环境与生产环境严格分离用 Mock 数据避免依赖外部服务断言要充分不仅断言状态码还要断言业务字段、数据结构、响应时间集成 CI/CD将接口测试嵌入流水线每次代码提交自动运行实现持续回归评审接口文档通过接口进行测试 和 通过用户界面进行测试一样 都需要有测试用例。测试用例的依据就是需求设计文档 接口测试用例当然也需要接口的需求设计文档通常称之为 接口文档。接口文档 通常 是由 开发人员提供 测试人员 根据接口文档编写接口测试用例。接口文档 里面应该包括 我们要测试的系统接口的具体信息。点击这里查看白月SMS系统的接口文档在写测试用例之前必须要先对接口文档进行评审找出里面的问题和 文档作者进行沟通 确保接口文档 基本正确、完善然后才能动手写测试用例。编写测试用例根据 白月SMS系统的接口文档编写测试用例对服务端系统进行接口测试用例模板点击这里下载编写测试用例的时候通常可以采用条件组合、边界值、错误猜测等常用方法。条件组合法通过组合不同的输入条件覆盖所有可能的逻辑分支。适用于多条件交互的场景确保每种组合都被测试。示例登录功能需测试用户名与密码的正确、错误、空值等组合。边界值分析法针对输入范围的边界及附近值进行测试因为边界区域容易产生错误。示例输入年龄限制为1-100岁测试0、1、2、99、100、101等值。错误猜测法基于经验推测可能出错的场景尤其是非常规或异常操作。示例文件上传功能测试非标准格式文件、超大文件或空文件。等价类划分法将输入数据划分为有效和无效等价类从每类中选取代表性数据测试。示例输入邮箱时有效类为合规邮箱格式无效类为缺失“”符号的字符串。状态转换法适用于有状态变化的系统测试不同状态间的转换逻辑。示例订单状态从“待支付”到“已取消”或“已完成”的流程测试。场景测试法模拟真实用户操作路径覆盖典型业务流程。示例电商场景从浏览商品、加入购物车到支付的完整流程。探索性测试法无固定脚本边测试边探索潜在问题依赖测试者的经验和直觉。示例随机操作APP界面检查未预设的交互问题。常用工具辅助结合自动化工具如Selenium、JUnit或管理工具如TestRail提升效率但核心仍依赖上述方法论。五 requests库 和 session接口测试必须使用工具才能发送、接收 HTTP 接口消息。目前常用的工具工具定位核心特点Postman手工调试 团队协作可视化、Collection 管理、环境变量、Mock 服务Apifox国产一站式API 设计 文档 Mock 测试一体化curl命令行快速调试轻量、脚本化、适合 CI/CD 集成JMeter性能 功能测试支持压测、分布式执行、断言丰富Hoppscotch开源轻量浏览器直接使用Postman 的免费替代Python requests pytest代码级自动化灵活、数据驱动、易于集成 CI/CDREST AssuredJava 生态与 Spring Boot 等 Java 项目无缝集成NewmanPostman CLI将 Postman Collection 在命令行/流水线中运行如果有Python编程基础只需要学习一个库requests就可以轻松的自己开发测试工具收发 HTTP消息。也为未来自己的多方面发展做铺垫。Requests库简介Requests 库是用来发送HTTP请求接收HTTP响应的一个Python库。常被用来爬取网站信息。 用它发起HTTP请求到网站从HTTP响应消息中提取信息。做网络服务系统的Web API 接口测试。因为Web API 接口的消息基本上都是通过HTTP协议传输的。Python中构建HTTP请求的库有很多其中 Requests 库最为广泛使用因为它使用简便功能强大。Requests库的官方网站在这里:Requests官方网站Requests库不是Python标准库而是第三方开发的。 安装第三方库使用包管理工具 pip。执行命令pip install requests。注[1] B站博主白月黑羽编程http://【python 做 API接口测试 和 自动化 - 1周入门】https://www.bilibili.com/video/BV1EJ411M7Ln?p4vd_sourcea94a2e7a699eae782e68e7e73ed12ff4

相关新闻