0 前言
Dredd可以用于测试所写的web api与实际运行的系统是否一致,可以搭配API Blueprint一起使用,并支持各种CI。
通过阅读Dredd的官网,把自己的理解写一写,还希望得到大家的指正。
1 安装
可以通过npm直接安装dredd工具,
npm install -g dredd
2 概述
Dredd的使用过程大致可以分为几个阶段:
- 编写API
- 实现API
- 测试API
2.1 编写
Dredd支持两种web api的规范
- API Blueprint
- Swagger
由于现实业务使用的是API Blueprint,所以之后都以这个的规范为例。
2.2 实现
这个过程就可大可小了,可以是个helloworld,可以只是为了测试而写的demo,可以是整个模块。
Dredd的功能就是测试2.2实现的API与2.1的Web API文档是否吻合。
2.3 测试
通过之前全局安装的dredd,可以直接在命令行输入指令完成测试,也可以先配置好Dredd的config文件,直接运行。
首先,将工程跑起来
npm start
之后运行dredd命令,参数api.apib表示Web API文档的文件名,之后的URL表示待测试的服务运行在的地址和端口
dredd api.apib http://localhost:3000
2.3.1 配置参数
通过dredd init可以交互式的配置dredd的运行参数、环境等等。
还有一种方法是先配置dredd.yml文件,将参数写入文件后存放到工程的根目录下,之后再想使用dredd时,直接不带任何参数地输入命令dredd
即可开始测试。
2.4 Hooks
Hooks用于测试时,加入“钩子”,在程序运行的不同阶段,执行特定的代码,辅助测试。
dredd的hook有很多,分别代表了不同的执行阶段。
- beforeAll 只执行一次,做一些测试开始前的预处理工作
- 对于每一个交互事务分别执行
- 测试开始
- beforeEach
- before
- 发送HTTP请求
- 接收HTTP响应
- beforeEachValidation
- beforeValidation
- 执行validation
- after
- afterEach
- 测试结束
- afterAll 只执行一次,做一些收尾工作
3 运行过程
- 读取API文档,同时检查是否有语法错误
- 根据文档描述的request和response,生成期望获取的结果
- 针对API文档,构造请求,测试API
- 检测收到的响应与期望是否一致
- 生成报告
4 检测标准
4.1 响应头的检测
- response必须包含所有在文档中指明的header信息
- headers的验证不区分大小写
- 只验证对内容商议有用的值
- 其余header值可以有所区别
4.2 响应体的检测
对于JSON格式的响应体,只验证JSON结构,
对于其余格式的响应体,当做普通文本处理。
为了便于检测,当文档中有JSON响应体的时候,需要将Schema,Attributes写在Body之前。
5 检测前的准备工作
需要适当的修改所写的API文档,以便更好地使用dredd工具。
将URI中的所有需要的参数都写入文档中并提供样例,这样Dredd可以自动填充URI模板,构造请求。
6 HTTP事务的处理流程
Dredd目前只支持单个请求单个响应的事务模式,即:
+ Request
+ Response
而Blueprint可以支持一个Request多个Response,所以这种情况下,Dredd只会选择第一个Response进行检测。