一、HTTP协议
HTTP 协议最大的特点是 通讯双方 分为 客户端
和 服务端
。
到了 1.1 版本, 建立连接后,这个连接可以保持一段时间(keep alive), 这段时间,双方可以多次进行 请求和响应, 无需重新建立连接。
浏览器中查看请求和响应HTTP:
摁F12,打开开发者控制台,点击network模块
HTTP请求方式
请求访问文本或图像等资源的一端称为客户端。而提供资源响应的一 端称为服务器端。
请求方法如下表
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获取报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立与资源之间的联系 | 1.0(已被 HTTP/1.1 废弃,不再支持 ) |
UNLINE | 断开连接关系 | 1.0(已被 HTTP/1.1 废弃,不再支持 ) |
常用的方法有:
1、GET (获取)
2、POST (添加)
3、PUT (更新)
4、DELETE (删除)
HTTP报文
HTTP报文的结构:
-
报文首部:服务器端或客户端需处理的请求或响应的内容及属性
-
请求行:包含用于请求的方法,请求uri和HTTP版本
例如: GET /src/index.html HTTP/1.1 表示要获取资源 请求资源的地址为/src/index.html,使用的协议为http 版本为1.1 POST /src/message HTTP/1.1 表示要传送资源 传送资源的目标地址为/src/message,使用的协议为http 版本为1.1
-
状态行:包含状态码,原因短语和HTTP版本
例如: HTTP/1.1 200 OK 表示使用的协议为http 版本为1.1 状态码为200 短语为200,即请求正常处理完毕
HTTP响应状态码:
类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求 4XX Client Error(客户端错误状态码) 服务器无法处理请求 5XX Server Error(服务器错误状态码) 服务器处理请求出错 -
首部字段:包含表示请求和响应的各种条件和属性的各类首部。
一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。比如, Host:请求发送的服务端域名 Accept:接受的信息类型/优先级 Accept-Language:语言集 Pragma:报文指令 ... ...
单个请求头的格式为:
名字: 值
。一个请求头,占据一行。在开发过程中,也可以根据需要,在HTTP消息中添加自己定义的请求头。
-
其他:可能包含HTTP的RFC里未定义的首部(cookie等)
HTTP请求和响应消息
请求报文:
-
请求行
-
请求头:请求首部字段、通用首部字段、实体首部字段等
-
消息体/报文主体:数据等
WEB API 响应消息体 ,常见的文本格式有:Json、Xml、www-form-urlencoded
响应报文:
-
状态行
-
响应头:响应首部字段、通用首部字段、实体首部字段等(与请求头类似)
-
消息体/报文主体:数据等
如果 HTTP 响应 有消息体, 协议规定需要在 消息头和消息体之间插入一个空行
CR+LF
, 隔开它们。
空行(CR+LF
):CR+LF
回车符和换行符
报文主体:应被发送的数据
HTTP报文实例:
二、接口测试概述
接口/接口测试
-
接口可以分为内部接口和外部接口
-
内部接口:是服务器端内部代码交互时用到的接口,一般不需要大量的测试,开发人员可以自己进行测试。如白盒测试就是测试内部接口。
例如:在一个学生成绩管理系统中,登录普通学生的帐号去调用只有管理员才能使用的API接口,例如修改学生成绩,如果只通过前端的操作发送请求是无法完成的,因此就要保证在普通学生帐号登录后没有修改成绩这一操作选项。
-
外部接口:是客户端与服务器端交互时用到的接口,如HTTP接口。
例如: 阿里云服务提供的 API 接口, 微信支付系统提供 的支付 API 接口, 作为 阿里云 或者 微信支付 的测试工程师,就要对其进行测试了
-
-
进行接口测试时,可以采用工具/Python的request库
- 经常采用Postman、JMeter、SoapUI、Insomnia等工具,其中使用较为频繁的工具是Postman。
- 工具的核心功能:构建HTTP请求消息,并且解析收到的HTTP响应消息, 用户来判断是否符合预期
- 自动化测试可采用Python的request库
-
API接口请求消息和HTTP消息
- API接口传递数据信息是通过HTTP协议进行收发的,网站获取网页、图片、css等资源,也是通过HTTP协议进行收发的
二者区别如下:
-
HTTP消息:网页、图片、css 这些资源,都是
静态资源
一个个文件存储在服务器上的,获取这些信息,服务端直接读取文件,返回给客户端即可,无需特别的数据处理。
-
API接口请求消息:通常都需要服务端程序进行 一番处理
比如:对请求的权限检查,从数据库中读出数据,进行信息过滤和 格式转换,最后在HTTP响应中返回给客户端。
-
接口测试可以理解为软件系统 消息交互接口 的测试。
- 网页前端、APP与后端服务器之之间,都会有消息的交互。
-
对于系统而言后端会比前端更为稳定。因此对服务端的测试做的比较多
- 接口测试本身是忽略了前端,直接与服务端来进行测试的一个过程
- 接口是为系统提供数据服务的,所有前端肉眼可见的数据,基本上都是基于接口来获取的
- 目前测试网络协议多数的是HTTP
- HTTP协议的特点:客户端发出一个HTTP请求给 服务端,服务端就返回一个HTTP响应。好像程序的API调用。所以 接口测试 通常又被称之为
API接口测试
或者WEB API接口测试
-
接口测试范围
- 业务功能(包括正常、异常场景是否实现)
- 业务规则(覆盖度是否全面)
- 参数验证(边界、业务规则是否达到要求)
- 异常场景(重复提交、并发提交、事务中断、多机环境、大数据量测试)
- 性能测试**(响应时间、吞吐量、并发数、资源要求)**
- 安全测试(权限验证、SQL注入等)
-
接口测试的重点
1、检查接口返回的数据是否与预期结果一致。
2、检查接口的容错性,假如传递数据的类型错误时是否可以处理。
3、接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理。
4、接口的性能,HTTP请求接口大多与后端执行的SQL语句性能、算法等比较相关。
5、接口的安全性,外部调用的接口尤为重要。
-
总结
接口测试的工作内容:
- 读文档:获取接口文档,评审文档,了解接口的实现细节
- 写测试用例:根据接口文档,写出测试用例,
- 测试验证:等产品发布后,根据测试用例,使用软件工具,直接通过消息接口 对 被测系统 进行消息收发,验证被测系统行为是否正确
接口文档
这里有一个腾讯开放平台的一个API文档:判断是否认证空间粉丝
通过 接口
进行测试 和 通过 用户界面
进行测试一样, 都需要有 测试用例
。
测试用例的依据就是 需求设计文档
接口测试用例当然也需要 接口的 需求设计文档,通常称之为 接口文档。
接口文档 通常 是由 开发人员提供, 接口文档中包含了测试人员要测试的系统接口的具体信息。阅读文档时,要与开发人员沟通接口文档正确,我们才能确保最终请求返回值是否正确,这很重要。然后才能进行测试用例的编写。
测试用例
根据接口文档(接口的需求设计文档)编写测试用例。
要素:
必要:用例编号、用例名称、前置条件、用例输入、测试步骤、期望输出、实际输出、备注
视情况:测试背景、优先级、重要级
编写测试用例的时候,通常可以采用 条件组合、边界值、错误猜测(白盒测试)等方法。