RESTful 规范与接口测试
RESTful 规范与接口测试
RESTful
本质:一种软件架构风格。
核心:面向资源。
解决问题:1. 降低开发的复杂性。2. 提高系统的可伸缩性 。
设计概念和准则
- 网络上的所有事物都可以称抽象为资源。
- 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识。
- 所有的操作都是无状态的。
资源:所谓“资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。
RESTful中的HTTP协议
HTTP是一个属于应用层的协议,特点是简捷、快速。
url
例:schema://host[:port]/path[?query-string] [#anchor]
schema:指定底层使用的协议(例如:http,https,ftp)
host:服务器的IP地址或者域名
port:服务器的端口,默认为80
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚
请求
组成格式:请求行、消息报头、请求正文
请求行:Method Request-URL HTTP-Version CRLF(例:GET /HTTP/1.0 CRLF)
请求方式
GET:请求获取Request-URL所标识的资源
post:在Request-URL所标识的资源后附加新的数据
head:请求获取有Request-URL所标识的资源的响应消息报头
put:请求服务器存储一个资源,并用Request-URL作为器标识
delete:请求服务器删除Request-URL所标识的资源
options:请求查询夫妻武器的性能,或者查询与资源相关的选项和需求
响应
组成格式:状态行、纤细报头、响应正文
状态行:HTTP-Version Status-Code Reason-Phrase CRLF(HTTP/1.0 200 OK)
常用状态码
- 200 OK //客户端请求成功
- 400 Bad Request //客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized //服务器收到请求,但是拒绝提供服务
- 400 Not Found //请求资源不存在
- 500 Internal Server Error //服务器发生不可预期的错误
- 503 Server Unavailable //服务器当前不能处理客户端的请求
RESTful与SOAP的区别
SOAP WebService
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
WebServce通过HTTP协议发送请求和接收结果时采用XML格式封装,并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。
效率和易用性
SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。
RESTful由于其面向资源接口设计以操作抽象简化了开发者的不良设计,同时也最大限度的利用了Http最初的应用协议设计理念。
安全性
RESTful对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。
SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。
如何设计RESTful风格的API
资源路径(URL)
在RESTful架构中,每一个网址代表一种资源,所以网址中不能有动词,只能有名词。一帮来说API中的名词应该使用复数。
例:以动物园(zoo)信息为例
https://api.example.com/v1/zoos //动物园资源
https://api.example.com/v1/animals //动物资源
https://api.example.com/v1/employees //雇员资源
HTTP动词
对于资源的操作(CURD),由HTTP动词表示
GET:从服务器取出资源(一项或多项)
post:在服务器新建一个资源
put:在服务器更新资源(客户端提供改变后的完整资源)
patch:在服务器更新资源(客户端提供改变的属性)
delete:从服务器删除资源
例:
- POST /zoos ://新建一个动物园
- GET /zoos/ID: //获取某个指定的动物园的信息
- PUT /zoos/ID: //更新某个指定动物园的信息
- DELETE /zoos/ID://删除某个动物园
过滤信息
如果记录的数量跟多,服务器不可能都将他们返回给用户。api应该提供参数,过滤返回结果。
例:
- ?offset=10:指定返回几率的开始位置
- ?page=2&per_page=100:指定第几页,以及每页的记录数
- ?sortby=name&order=asc:指定返回结果排序,以及排序顺序。
- ?animal_type_id=1:指定筛选条件
状态码
服务器向用户返回的状态码和提示信息,使用标准HTTP状态码
幂等性(Idempotent):是一个数学上的概念,在这里表示发送一次和多次请求引起的边界效应是一致的。Post是不幂等方法
- 200 OK 服务器成功返回用户请求的数据,该操作是幂等的。
- 201 CREATED 新建或修改数据成功。
- 204 NO CONTENT 删除数据成功
- 400 BAD REQUEST 用户发出的请求有错误,该操作是幂等的
- 401 Unauthorized 表示用户没有认证,无法进行当前操作
- 403 Forbidden 表示用户访问时被禁止的
- 422 Unprocesable Entity 当创建一个对象是,发生一个验证错误
- 500 INTERNAL SERVER ERROR 服务器发生错误,用户将无法判断发出的请求是否成功
错误处理
如果状态码是4xx或者5xx,就应该向用户返回出错信息,一般来说,返回的信息中将error作为键名,出错信息作为键值即可
{
“error”:"参数错误"
}
返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范:
- GET /collections:返回资源对象的列表(数组)
- GET /collections/identity:返回单个资源对象
- POST /collections:返回新生成的资源对象
- PUT /collections/identity:返回完整的资源对象
- PATCH /collections/identity:返回被修改的属性
- DELETE /collections/identity:返回一个空文档
接口测试
接口测试又称为API测试(Application Programming Interface)
接口测试是测试系统组件间接口的一种测试,重点挂关注数据传递
接口测试一般会用于多系统间交互开发,或者拥有多个子系统的应用系统开发测试
RESTful风格接口测试流程
测试覆盖:
- 业务流程
- 边界值,特殊字符
- 参数类型,必选项,可选项等
- 并发数
- 吞吐量,tps
- 出错率等
- 敏感数据加密
- 恶意攻击
测试步骤
了解接口格式–》编写测试用例–》测试用例评审–》开始测试–》完成测试报告
Rest api测试计划
需求描述
GET:http://loclahost:8080/MyWebsite/user/
Header:Content-Type = application/json
Body:空
Response:返回所有的User对象
Staus code:200
错误返回
Code:4 Message:找不到指定id对象
Code:5 Message:对象已经存在
Code:6 Message:参数不匹配
业务流程
GET:
- 正向用例:返回所有对象和返回某一个对象
- 负向用例:一个不存在的id、URL输入不正确
使用Postman验证测试用例
推荐阅读
-
RestFul API接口规范
-
restful最佳实践--接口规范
-
RESTful 规范与接口测试
-
接口测试总结与分享
-
Django-rest framework开发:Restful 接口规范
-
使用python3和flask构建RESTful API(接口测试服务与mockserver工具)
-
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful
-
Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口
-
接口技术的实现:规范用户类的成员与类型
-
接口测试框架实战(一) | Requests 与接口请求构造