文章目录
一、接口
1. 接口及接口测试概念
(1)接口概念
- 系统与系统之间、组件与组件之间,完成数据交互的通道
(2)接口类型
- 按照协议划分:http、tcp、ip…
- 按照语言划分:C++、Java、php…
- 按照范围划分
- 系统之间
- 多个内部系统之间
比如:用户系统、订单系统、商品系统 - 内部系统与外部系统之间
比如:商品系统与支付系统
- 多个内部系统之间
- 程序之间
- 方法与方法之间、函数与函数之间、模块与模块之间
- 系统之间
(3)接口测试概念
概念:对组件或者系统之间的接口进行测试,主要是(校验数据准确性&逻辑依赖关系的准确性)
校验数据的交换
传递和控制管理过程
相互逻辑依赖关系
比如:要进入【商品订单】页面,就需要先进入【登录页面】完成登录
(4)接口测试原理
- 👀接口测试,主要针对的测试目标是——服务器
- 怎么测?
- 模拟客户端,向服务器发送请求
- 用什么测?(接口测试的实现方式)
- 工具:fiddler[抓包为主]、postman、jmeter
- 代码:python+UnitTest框架+Requests框架
- 测什么?
- 测试服务器针对客户端请求,返回的响应数据是否与预期结果一致(目视对比/断言自动判断)
(5)接口测试特点
- 符合质量控制前移理念(提前发现bug,接口处解决)
- 发现一些页面操作发现不了的问题(接口测试可测任意类型的数据 )
- 低成本、高收益
- 从用户的角度对系统进行检测
(6)自动化接口测试
- 借助工具、代码,模拟客户端发送请求给服务器,借助断言自动判断【预期结果】和【实际结果】是否一致。
2. 接口的四大类传参
(1)URL格式传参
- 直接拼接在url后面:
url?params
- 使用params传参(url格式参数 或者 字典)
(2)form表单传参
Content-Type:application/x-www-form-urlencoded
- 使用
data=字典
(3)json格式传参
Content-Type:application/json
- 使用
json=字典
(4)请求头传参
- 头是一个字典
headers = 字典
- 头部参数一般传的是验证信息
3. 接口的结果
(1)text
文本结果,可查看res.text
(2)json()
查看json解析之后的结果,返回一个字典(返回值需要是标准的json字符串,否则会报错)
(3)content
二进制结果,可根据需求转码(unicode-escape,utf8,gbk)
返回字符串
(4)响应头
服务器完成接口功能之后返回的验证信息
res.headers
res.cookies
(举例:res.cookies.get("xxxx名")
)
4. Requests文件上传与下载
(1)单个文件的上传
url = 'http://httpbin.org/post'
files = {'file': open('../xxx.doc', 'rb')}
res = requests.post(url, files = files)
print(res.text)
(2)指定参数的上传
url = 'http://httpbin.org/post'
# 打开上传文件并加入文件相关参数
files = {'file': ('report.xls', open('../lib/xxx.doc', 'rb'), 'application/x-www-form-urlencoded')}
# 其他参数可以同时使用data=或者json=补充传递
data = None
json = None
res = requests.post(url, data=data, json=json, files=files)
print(res.text)
二. 👀HTTP协议
- 协议:即规则。要求数据通信的双方必须严格遵守的规则。
1. HTTP协议介绍
- HTTP,超文本传输协议(HyperText Transfer Protocol),一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的网络协议.
- [下面的不用细看]
- 超文本-超出文本范围,可传输图片、视频、音频…
- 请求–客户端发送
- 相应–服务器发送
- 应用层协议
- 计算机 (底层硬件+上层应用程序)
- 上-下:应用层 – TCP/UDP指定端口 – IP指定IP地址[IP唯一标识一台主机] – 底层链路层
2. HTTP协议特点
- 支持【客户端/服务器】模式
- 简洁快速
- 灵活
- 无连接(不需要提前建立连接,只需要指定IP[找主机]跟端口[找程序])
- 无状态
3. 👀URL格式
- 概念
- URL,统一资源定位符,是互联网上标准资源的地址
- 作用:可以在网络环境中唯一的找到数据资源
- 数据资源(在网络上可见的所有东西)
- 可以是 服务/应用
- 也可以是 方法/函数/变量
- HTTP可以使用URL来建立连接和传输数据
-
- 协议:http 数据传输的方式
- 域名(IP地址):在网络环境中找到主机 —— 使用
://
与协议分隔 - 端口(port):在网络主机上标识应用程序/进程 —— 使用
:
与域名分隔(http默认80,https默认443) - 资源路径:标识网络资源(文件、图片…) —— 使用
/
与端口分隔 - 查询参数:传递给资源路径所对应的数据 —— 使用
?
与资源路径分隔,内部使用&
分隔
4. 👀HTTP请求
(1)作用
- 客户端(app, 浏览器)发送HTTP请求给服务器时所使用的协议 —— HTTP请求协议
- 规定了发送给服务器的数据传输的语法格式
(2)请求格式
- 请求行 :【HTTP请求的第一行】
请求方法(空格)URL(空格)协议版本
- http请求方法
- get:查询
- post:添加(常用于登录)
- put:修改
- delete:删除
- http请求方法
- 请求头 :【掌握语法格式】
- 语法格式:
key:value
User-Agent
:描述【请求发送端】的浏览器类型Content-Type
:描述【请求体】的数据类型,常见数据类型有:application/json
:JSON数据格式application/x-www-form-urlencoded
:form表单数据(如下图)
- 语法格式:
- 空行 :代表http请求头结束
- 请求体 :请求发送时携带的数据,数据类型
Content-Type
的值(如下图类型是表单)- 有请求体:
post、put[修改操作]
- 无请求体:
get、delete
- 数据值的组织形式,受Content-Type的影响
- 有请求体:
(3)Fiddler抓包
5. 👀HTTP响应
(1)作用
- 服务器端根据客户端发送的HTTP请求,发送响应数据 —— HTTP应答
- 规定了回发给客户端的数据传输的语法格式
(2)语法格式
-
响应行/状态行
-
协议版本+状态码+状态消息
-
状态码
- 1xx:指示信息 —— 表示请求已被接收,继续处理
- 2xx:成功 —— 表示请求已被成功接收、理解、接受,
eg: 200, 201
- 3xx:重定向 —— 要完成请求必须进行更进一步操作,待访问的资源需要重新指定路径访问
- 4xx:客户端错误 —— 请求有语法错误或者请求无法实现,
eg: 404, 403
- 5xx:服务器端错误 —— 服务器未能实现合法的请求
-
状态码描述:一般与状态码相对应
200 -- OK;400 -- file not found
-
-
响应头
-
响应体
回发给客户端的内容,常见:HTML网页、xml、json
6. 传统风格接口
- 请求方法只使用
get / post
- url不唯一
- 状态码的使用比较单一,常见:200
7. RESTful
(1)特点:[了解]
- 每一个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 表现层:数据的不同表现形式(如:图片、文字表现同一个数据对象)
- 客户端通过四个HTTP动词(post、delete、put、get),对服务器端资源进行操作,实现"表现层状态转化";
- 接口之间传递的数据最常用格式为JSON。
三、接口测试流程
1. 接口测试流程
- 进行需求分析,生成需求文档(产品负责)
- 尝试接口文档(开发负责),解析接口文档(测试负责)
- 产生测试用例。送审
- 执行测试用例
- 工具:postman、jmeter
- 代码:python + Requests + UnitTest
- 提交、跟踪缺陷
- 生成测试报告
- (可选)接口自动化持续集成
2. 接口文档
(1)什么是接口文档
- 由开发人员编写,描述接口信息的文档,开发团队按照接口文档进行开发工作。
(2)接口文档的作用[了解]
- 能够让前端开发与后台开发人员更好的配合,提高工作效率。(有一个统一参考的文件)
- 项目迭代或者项目人员更迭时,方便后期人员查看和维护
- 方便测试人员进行接口测试
(3)展现形式
- word 文档形式
- Excel 表格式形式
- pdf 文档形式
(4)👀结构
- 基本信息
- 资源路径(协议和域名在 “系统信息”中)
- 请求方法
- 接口描述
- 请求参数
- 请求头
- Content-Type:描述请求体的数据类型
- 请求体
- 实现该接口使用的数据集与对应类型
- 请求头
- 返回数据
- 成功:状态码 200
- 失败:错误码(属于自定义的状态码)
- 码值
- 错误信息
3. 👀接口文档解析
- 接口文档解析的本质:从接口文档中,找出http协议所需要的数据信息请求方法
- 主要包含:请求方法、URL、请求头、请求体、响应状态码、描述
- 主要包含:请求方法、URL、请求头、请求体、响应状态码、描述
4. 使用fiddler发送HTTP请求