接口和接口测试的概念&HTTP协议&接口风格&接口测试流程
1 什么是接口?
1.1 用户界面
人类与电脑等信息机器或人类与程序之间的接口
1.1 硬件接口
电脑等信息机器硬件组件间的接口
1.2 软件接口
电脑等信息机器软件组件间的接口,是数据交互的通道,在系统或组件间,完成数据的传递。
1.2.1 接口类型
(1)按协议划分:
HTTP、TCP、UDP、IP、FTP等
(2)按语言划分:
Python、Java、PHP、C、C++等
(3)按范围划分:
- 系统之间:内部系统之间,内部系统和外部系统之间。
- 程序内部:方法函数和方法之间;类和类之间;模块和模块之间。
2 什么是接口测试?
接口测试主要测试系统或组件之间交互的数据的正确性,以及逻辑依赖关系的正确性,代替前端或者第三方验证后台响应数据是否正确。
2.1 原理
测试人员模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收响应数据后并进行判断的一个过程。
可使用工具(Postman、Fidler、jmeter)或代码(Python+unittest+request)模拟客户端向服务器发送请求,校验服务器回发的响应数据是否与预期结果一致。
2.2 分类
(1) Web接口测试
- 1)服务器接口测试:测试服务器与浏览器的接口
- 2)外部接口测试:第三方接口测试
(2)模块接口测试(C/S架构的应用)
2.3 接口测试的优点
(1)接口测试符合测试质量控制前移原则,提早介入。
(2)可以发现页面操作发现不了的问题。
(3)可以提高测试效率,提升用户体验,降低研发成本(接口的一个BUG可能对应上层界面多个BUG)。
(4)接口测试也是站在用户角度开展的测试。
3 HTTP协议
协议是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规则或规定;HTTP协议,即超文本传输协议,规定了浏览器和服务器之间通信的规则,是基于请求和响应模式的应用层协议,是目前互联网中广泛使用的一种协议。
HTTP协议特点:支持客户端、服务器模式、简单快速、灵活、无连接、无状态
3.1 URL
URL,即统一资源定位符,是互联网上标准资源的地址,HTTP使用
URL来建立连接和传输数据,互联网上的每个资源都有唯一的URL。
格式:协议://域名:端口号/路径?查询参数1&查询参数2
- 协议:HTTP/HTTPS
- 域名:本质是IP地址,是为了方便用户去记忆,而自己设计的一个名字,一般需要花钱购买,由一级域名,二级域名,三级域名组成,和服务器一样都需要花钱购买,国内常见的服务商有:万网,新网,西部数据,美橙互联等
- 一级域名:最后一个点后面的内容,.com, .net, .cn(如:www.baidu.com的一级域名为:com)
- 二级域名:一级域名左边,一般为需求方自己设计,一级域名和二级域名连在一起应是全世界唯一(如:www.baidu.com的二级域名为:baidu)
- 三级域名:一般为用户自定义,最常见的就是www
- 端口号:在网络主机上定位一个应用,端口号可以省略,没有指定端口号,默认跟随协议
- HTTP协议默认端口号:80
- HTTPS协议默认端口号:443
- 路径:对应网页的源代码或网络中的一个数据资源;若资源路径为空,相当于资源路径为“/”。
- 查询参数:传参给网页源码,查询参数语法为键值对
3.2 HTTP请求
HTTP请求由客户端发送给服务器,规定了发送给服务器的数据语法格式;请求内容包括:请求行、请求头、请求空行、请求体
3.2.1 请求行
主要内容:请求方法、 URL、协议版本
(1)请求方法:
请求方法 | 主要作用 | 请求体有无数据 |
---|---|---|
POST | 新增 | 有 |
GET | 查询 | 无 |
PUT | 修改 | 有 |
DELETE | 删除 | 无 |
(2)协议版本:http1.1、http1.2、http2.0,主要使用 http1.1
3.2.2 请求头
请求头中的数据(数据为键值对)主要向服务器描述客户端/浏览器的基本信息。
Accept:客户端能够显示的信息类型
Accept-Encoding:浏览器支持的压缩类型
Accept-language: 浏览器支持的语言类型
Connection:连接方式,如:Connection:keep-alive ➡️保持较短连接,反复和服务器通讯
Cookie
host:主机
User-Agent:向服务器描述浏览器的类型
Content-Type: 请求体的数据类型
3.2.3 请求体
POST和PUT请求有请求体,GET和DELETE请求没有请求体。
新版本谷歌浏览器开发者工具中,请求体独立出了一个页签。
3.3 HTTP响应
HTTP响应由服务器回发送给客户端,规定了服务器回发给客户端的数据的语法格式。响应内容包括响应行/状态行、响应头、响应空行、响应体
3.3.1 响应行/状态行
主要内容:协议版本、状态码、状态描述
(1)协议版本
http1.1、http1.2、http2.0,主要使用 http1.1
(2)状态码
针对http请求,响应的状态。
* 状态码由3位数字组成,第一位数字定义了响应类型,有5种可能取值:
- 1xx:指示信息——表示请求已接收,继续处理
- 2xx:成功——表示请求已被成功接收、理解、接受
- 3xx:重定向——要完成请求必须进行更进一步的操作
- 4xx:客户端错误——请求有语法错误或请求无法实现
- 5xx:服务端错误——服务器无法实现合法的请求
状态码 | 描述 |
---|---|
200 | 服务器成功返回用户请求的数据 |
201 | 用户新建或修改数据成功 |
202 | 表示一个请求已经进入后台排队(异步任务)(客户端发送的请求服务端已接受,但服务器还未完成处理) |
204 | 用户删除数据成功 |
301 | 请求地址被永久移动到新的URL,网页会跳转到新的URL |
302 | 请求地址被临时性移动 |
400 | 用户发出的请求有错误,服务器没有进行新建或修改数据的操作 |
401 | 表示用户没有权限(用户名、密码、令牌错误) |
403 | 用户被授权,但访问被禁止,服务器理解客户端的请求,但拒绝处理它,通常是服务器上文件或目录权限问题导致的Web访问错误 |
404 | 服务器无法根据请求找到资源,请求的资源(网页)不存在了 |
406 | 用户请求的格式不存在(用户请求JOSN格式的数据,但只有XML的) |
410 | 用户请求的资源被永久删除, 且不会再得到 |
501 | 服务器不具备完成请求的功能,无法完成此请求 |
505 | 服务器发生了内部错误,无法完成客户端请求 |
更完整的状态码可参照:https://blog.csdn.net/wyp1725726792/article/details/102741600
3.3.2 响应头
响应头向客户端描述服务器的基本信息。
Content- Type:向客户端描述响应体的数据类型
Server:服务器的版本
X- Frame- Option:网页中能否显示iframe,same origin表示该页面可以在相同域名页面的 frame 中展示。
Content- length:响应体长度
3.3.3 响应体
响应体的数据类型受响应头中Content-Type的值影响,响应体的常见的类型:json、表单、图片。
3.4 接口风格
3.4.1 传统风格接口
传统风格接口针对用户的某一个操作(增删改查)URL不唯一,即一个操作可能对应多个URL,响应状态码全部都为 200。
全部使用POST和GET实现对数据的基本操作。
3.4.2 RESTful风格接口
RESTful是一种为了提高程序易读性和易维护性而制定的接口设计规范,是一个资源定位、资源操作的风格,而非标准,只是提供了一组设计原则。使用唯一的URL定位唯一的资源。在 URL中不使用动词,而替换使用词,结合请求方法,区分具体增删改查操作。
Restful风格规范了:
(1)URL的实现方式
(2)请求的数据的实现方式
(3)响应的数据的实现方式
RESTful风格使用POST、DELETE、PUT、GET分别表示增、删、改、查四种操作。
- POST:从服务器新建一个资源
- DELETE:从服务器删除资源
- PUT:从服务器更新资源
- GET:从服务器获取一项或多项资源
(1) 增
- 请求方式:POST
- 提交数据格式:键值对 或 JSON
- 响应状态码: 201 或 200(更多为201)
- 响应返回的数据:返回新生成的资源对象
(2)删
- 请求方式:DELETE
- 提交数据格式:键值对
- 响应状态码:204
- 响应返回的数据:空
(3)改
- 请求方式:PUT
- 提交数据格式:键值对 或 JSON
- 响应状态码:201 或 200 (更多为201)
- 响应返回的数据:返回完成的资源对象
(4) 查
- 请求方式:GET
- 提交数据格式:键值对 或 JSON
- 响应状态码:200
- 响应返回的数据:返回资源对象的列表/数组 或 单个资源对象
4 接口测试流程
step1:分析需求文档,参与需求评审
step2:结合开发提供的接口文档,分析接口
step3:编写接口测试用例
step4:执行接口测试用例(通过Postman、fiddler、jmeter,或者使用代码方式:Python + UnitTest + requests)
step5:对缺陷进行跟踪管理
step6:编写接口测试报告