目录:
- 接口测试价值与体系
- 常见的接口协议
- 接口测试用例设计
- postman基础使用
- postman实战练习
1.接口测试价值与体系
接口测试概念
- 接口:不同的系统之间相互连接的部分,是一个传递数据的通道
- 接口测试:检查数据的交换、传递和控制管理过程
接口测试的价值
- 传统的测试方法成本急剧上升
- 测试效率下降
分层测试体系
- 越往上,发现 Bug 的时间越晚,成本越高
- 接口测试(Service)相比 UI 测试,可以更早发现问题,更快的质量反馈
接口测试学习路线
接口测试与 mock 学习路线
形式 | 章节 | 描述 |
---|---|---|
知识点 | 接口测试价值与体系 | 了解接口测试的知识体系与学习路线 |
知识点 | 常见的接口协议 | 了解常见接口协议、重点掌握 HTTP 协议 |
知识点 | 接口测试用例设计 | 掌握接口测试用例设计思路 |
知识点 | postman 基础使用 | 掌握 postman 的安装和基础使用 |
实战 | postman 实战练习 | 使用 postman 完成接口测试 |
知识点 | 抓包工具 charles | 掌握 charles 的安装和基础配置 |
知识点 | 抓包工具 fiddler | 掌握 fiddler 的安装和基础配置 |
知识点 | 抓包工具证书配置 | 抓包工具证书配置 https 协议数据抓包 |
实战 | App 抓包实战练习 | 对雪球实现抓包 |
实战 | 接口测试实战练习 | 结合 postman 完成对宠物商店的接口测试 |
知识点 | 弱网测试 | 使用 charles 完成弱网测试 |
知识点 | mock 的价值与意义 | 了解 mock 测试的价值与意义 |
实战 | mock 实战练习 | 雪球 mock 实战练习 |
知识点 | 使用 curl 发送请求【选修】 | 了解 curl 命令的参数 |
知识点 | tcpdump 与 wireshark 的使用【选修】 | 了解 tcpdump 与 wireshark 的基本使用 |
2.常见的接口协议
网络模型
OSI七层模型:
- 物理层:物理层负责传输比特流,即0和1的电信号或光信号。它涉及到电气、机械和定时接口的规范,如电缆、集线器和中继器的使用。这一层的主要目的是确保原始数据可以在各种物理媒体上传输。
- 数据链路层:数据链路层负责将比特流组合成帧,并对帧进行错误检查和寻址。它定义了如何在网络硬件之间传输帧,包括如何使用物理层提供的服务来传输帧。这一层还包括诸如以太网、令牌环和点对点协议等具体的协议。
- 网络层:网络层负责将数据包从源地址发送到目的地址。它处理路由和转发,负责在数据链路层的基础上选择最佳路径,并将数据包从一个网络传输到另一个网络。网络层协议包括互联网协议(IP)、互联网控制消息协议(ICMP)和传输控制协议(TCP)。
- 传输层:传输层负责在源端和目的端之间建立、管理和终止会话。它将数据分段并重新组装,以确保数据的完整性和可靠性。同时,它还提供了错误检查和流量控制功能。传输层协议主要有传输控制协议(TCP)和用户数据报协议(UDP)。
- 会话层:会话层负责建立、管理和终止网络连接上的会话。它负责同步和对话控制,以及数据交换和分布式事务的处理。会话层还包括诸如远程过程调用(RPC)和SQL等协议。
- 表示层:表示层负责对数据进行编码和解码,以确保发送方和接收方之间的数据格式一致。它处理诸如数据压缩、加密和解密等数据转换操作。表示层协议包括MIME、TLS和SET等。
- 应用层:应用层负责处理用户和应用程序之间的通信。它为用户提供了网络服务接入点,允许应用程序使用网络进行通信。应用层协议包括HTTP、FTP、SMTP、DNS和Telnet等,这些协议为用户提供了访问网络资源的接口。
TCP/IP四层模型:
- 网络接口层(比特):这一层是物理层和数据链路层的统称,负责在物理媒体上传输原始的比特流。主要涉及电缆、集线器和中继器等硬件设备的规范和管理。
- 网络层(数据帧):网络层负责将数据包从源地址发送到目的地址。它处理路由和转发,负责在数据链路层的基础上选择最佳路径,并将数据包从一个网络传输到另一个网络。本层的功能通常由IP协议来实现。
- 传输层(数据包):传输层负责在源端和目的端之间建立、管理和终止会话。它将数据分段并重新组装,以确保数据的完整性和可靠性。同时,它还提供了错误检查和流量控制功能。本层的功能通常由TCP或UDP协议来实现。
- 应用层(数据段):应用层负责处理用户和应用程序之间的通信。它为用户提供了网络服务接入点,允许应用程序使用网络进行通信。本层的协议非常丰富,包括HTTP、FTP、SMTP、DNS和Telnet等,这些协议为用户提供了访问网络资源的接口。
五层体系结构:
- 应用层:这一层包括了所有能与用户直接交互的程序,比如网页浏览器、电子邮件客户端、聊天工具等等。应用层的协议包括HTTP、FTP、SMTP、POP3、IMAP等。
- 传输层:这一层的任务是确保数据能够在源端和目的端之间进行交换。传输层协议包括TCP和UDP两种,其中TCP是一种基于连接的协议,能够确保数据在发送端和接收端之间传输完整;而UDP则是一种无连接协议,它不会确保数据在发送端和接收端之间传输完整。
- 网络层:网络层负责确定数据包在网络中的路径,其协议包括IP、ICMP和ARP等。IP协议负责将数据包发送到正确的目的地;ICMP协议负责报告网络中的问题,例如丢失的数据包;ARP协议用于在网络中查找IP地址。
- 数据链路层:这一层的任务是在两台计算机之间传输数据。常见的协议包括以太网和无线局域网,以太网是最常用的数据链路层协议,它使用网线将计算机连接到网络;无线局域网使用无线信号将计算机连接到网络。
- 物理层:这一层包括了所有物理媒体,比如电缆、集线器、中继器等等。物理层的协议包括RS-232、USB和Fiber Channel等,RS-232是一种通过串行线将计算机连接到网络的协议;USB是一种通过USB接口将计算机连接到网络的协议;Fiber Channel是一种通过光纤将计算机连接到网络的协议。
常见接口协议
RPC 协议
- RPC(Remote Procedure Call)
- 以本地代码调用的方式实现远程执行
- 主要用于公司内部的服务调用
- 优点:传输效率更高、性能损耗更低、自带负载均衡策略、更好的服务治理能力
- 常见的 RPC 协议
- Dubbo:Java 基础之上的高性能 RPC 协议
- gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB 是一个语言中立、平台中立的数据序列化框架
- Thrift:与 gRPC 类似的多语言 RPC 框架
HTTP 协议
- 请求
- 请求行:method url protocol
- 请求方法:GET、POST、PUT、DELETE、HEAD
- 请求头: Host Cookie User-Agent
- 请求参数 query
- 请求体:JSON XML FORM
- 响应:
- 响应状态行
- 响应头
- 响应体
URI 和 URL
- URI,统一资源标识符,用来唯一的标识一个资源。
- URL,统一资源定位符,它是一种具体的 URI
- URL 结构:
https://www.baidu.com/s?wd=海贼王&rsv_spt=1
- 协议:
http
- 域名:
www.baidu.com
- 端口:跟在域名后面,域名和端口之间使用“:”作为分隔符,非必须,如果省略端口部分将采用默认端口
- 路径:
/s
- 请求参数:
wd=海贼王&rsv_spt=**1
- 协议:
HTTP 请求报文
> GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
> Host: baidu.com
> Accept-Encoding: deflate, gzip
> Connection: keep-alive
> Pragma: no-cache
> Cache-Control: no-cache
> User-Agent: Mozilla/5.0
(Macintosh; Intel Mac OS X 10_15_0)
AppleWebKit/537.36
(KHTML, like Gecko)
Chrome/80.0.3987.116 Safari/537.36
> Accept: image/webp,image/apng,image/*,*/*;q=0.8
> Referer: https://sougou.com/
> Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
> Cookie: user_id=xx;
_homeland_session=xx;
>
HTTP 响应报文
< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 12 Mar 2020 09:13:44 GMT
< Content-Type: image/png
< Content-Length: 11390
< Connection: keep-alive
HTTP 响应状态码
- 1xx 临时响应,表示通知信息,请求收到了或正在进行处理
- 2xx 表示成功,接受或知道了
- 200 成功
- 3xx 表示重定向,要完成请求还必须才去进一步的行动
- 301 永久移动
- 302 临时移动
- 4xx 表示客户端请求错误
- 403 未授权
- 404 未找到
- 5xx 表示服务端错误
- 500 服务器内部错误
- 503 服务不可用
RESTful 架构
- Restful:Representational State Transfer
- 借助于 HTTP 协议的基本请求方法代表资源的状态切换
- GET:获取资源
- POST:新增或者更新
- PUT:更新资源
- DELETE:删除资源
3.接口测试用例设计
接口测试流程
接口测试用例设计思路
接口测试用例要素
- 用例名称
- 接口地址
- 请求方式
- 前置条件
- 请求头部
- 请求参数
- 响应状态码
- 预期响应结果
4.postman基础使用
Postman 介绍
- 快速构建请求
- 提供响应结果的比较功能
- 查看测试结果
- 批量运行
- 设置环境变量
Postman 安装
- 官网下载地址
- https://www.postman.com/downloads
Postman 使用
- 发送 GET 请求
- 新建请求
- 填写请求方式:GET
- 填写请求参数: para_key = para_value
- 发送 POST 请求
- 请求方式:POST
- 请求参数
- FORM 格式:Body –> form-data
- JSON 格式:Body –> raw –> JSON
- 文件格式:Body –> form-data –> File
- FORM 格式:Body –> form-data
操作头信息
- 添加请求头
- 修改请求头
查看接口响应
- 响应体
- 响应头
- 响应状态
5.postman实战练习
测试流程:
- 宠物商店接口文档分析
- 接口测试用例设计
- Postman 完成接口测试
宠物商店接口文档分析
- 接口文档:https://petstore.swagger.io
- 宠物的增删改查
接口测试用例设计
- 宠物的增删改查冒烟测试用例
文档地址:template: 用来存放开发模版 - Gitee.com
Postman 完成接口测试
- 创建测试集
- 编写断言
- 运行测试集
- 查看测试结果
新增宠物
查询宠物
更新宠物:
删除宠物:
断言
- 验证响应状态码
- 验证响应体中是否包含某个字符串
- 验证 JSON 中的某个值是否等于预期的值
- 验证响应体是否与某个字符串完全相同
- 验证响应头信息中的 Content-Type 是否存在
- 验证响应时间是否小于某个值
// Status Code:Code is 200
// 验证响应状态码
pm.test("响应状态码为 200", function () {
pm.response.to.have.status(200);
});
// Response Body:contains string
// 验证响应体中是否包含某个字符串
pm.test("响应体中包含预期的字符串", function () {
pm.expect(pm.response.text()).to.include("doggie");
});
// Response Body:JSON value check
// 验证 JSON 中的某个值是否等于预期的值
pm.test("宠物名称为 doggie", function () {
var jsonData = pm.response.json();
pm.expect(jsonData[0].name).to.eql("doggie");
});
// Response Body:Is equal to a string
// 验证响应体是否与某个字符串完全相同
pm.test("响应体正确", function () {
pm.response.to.have.body("response_body_string");
});
// Response Body:Content-Type header check
// 验证响应头信息中的 Content-Type 是否存在
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
// Response time is less than 200ms
// 验证响应时间是否小于某个值
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
新增宠物断言:
json压缩转义成字符串:
查询宠物断言:
更新宠物断言:
json压缩转义成字符串:
删除宠物断言:
运行测试集
- 测试集页面 -> Run 按钮
宠物商店运行结果:
查看测试结果:
变量
- Postman 中变量的种类与作用域
- Data:在测试集中上传的数据
- Environment:环境范围
- Collection:集合范围
- Global:全局范围
- Local:在脚本中设置的变量
变量定义
- 全局变量:Environments -> Globals
- 测试集变量:测试集页面 -> Variables
- 环境变量:Environments -> +
全局变量:
全局变量的使用:
变量的使用
- 请求 URL, Params 参数或 Body 表格或JSON/XML 文本中通过
{{变量名}}
使用 - 在 Pre-request Script 和 Tests 脚本中使用封装好的语句获取或者设置对应变量
全局变量的使用:
Pre-request Script
在脚本中获取全局变量
测试集变量:
测试集变量的使用:
环境变量
环境变量的使用:
变量的优先级文章来源:https://uudwc.com/A/DNkZa
- 优先级从高至低为:Data -> Enviroment -> Collection -> Global -> Local
文章来源地址https://uudwc.com/A/DNkZa