安装
Apitest工具是单可执行文件,不需要安装,放到PATH
路径下面就可以直接运行
1 | ruby复制代码# linux |
开始使用
编写测试文件 httpbin.jsona
1 | css复制代码{ |
执行如下命令测试接口
1 | 复制代码apitest httpbin.jsona |
其结果如下
1 | css复制代码main |
Apitest 发现了k1的值异常 main.test1.res.body.args.k1: v2 ≠ v1
并打印错误,同时还打印了接口请求响应详情。
如果我们修改 main.test1.res.body.args.k1
值 v2 => v1
后再执行测试。
1 | 复制代码apitest httpbin.jsona |
其结果如下
1 | css复制代码main |
Apitest 报告测试通过了。
原理
Apitest 执行测试文件时会加载全部测试用例,逐一执行,其执行过程可以描述为:根据 req
部分构造请求发送给服务器,收到响应后依据 res
校验响应数据,然后打印结果。
Apitest 中的用例文件格式是 JSONA。 JSONA是JSON的超集,减轻了一些JSON语法限制(不强制要求双引号,支持注释等),再添加了一个特性:注解。上面例子中的@partial
就是注解。
为什么使用JSONA?
接口测试的本质的就是构造并发送req
数据,接收并校验res
数据。数据即是主体又是核心,而JSON是最可读最通用的数据描述格式。
接口测试还需要某些特定逻辑。比如请求中构造随机数,在响应中只校验给出的部分数据。
JSONA = JSON + Annotation(注解)。JSON负责数据部分,注解负责逻辑部分。完美的贴合接口测试需求。
特性
- 跨平台
- DSL
- 类JSON,没有学习难度
- 编写简单,阅读容易
- 不要求编写者会编程
- 数据即断言
- 数据可访问
- 支持Mock
- 支持Mixin
- 支持CI
- 支持TDD
- 支持用户定义函数
- 跳过,延时,重试和循环
- 支持Form,文件上传,GraphQL
示例
下面的示例会用到一些注解,不明白的地方请查看README
全等校验
默认请求下,Apitest 进行全等校验。
- 简单类型数据(null,boolean,string,number)完全相等
- object数据属性和属性值完全相等,字段顺序可以不一致
- array数据元素长度和各元素完全相等,元素顺序也要一致
1 | js复制代码{ |
Apitest 保证:只有当实际接收到的 res
数据与我们用例中描述的 res
数据全等,测试才会通过。
数组校验技巧
Apitest 默认全等校验,而接口返回的array数据可能几十上百条,怎么办?
通常接口数据是结构化的,我们可以只校验数组第一个元素。
1 | js复制代码{ |
如果array数据的长度也很关键呢?
1 | js复制代码{ |
对象校验技巧
Apitest 默认全等校验,而接口返回的object数据的属性很多,我们只关注其中部分属性?
1 | js复制代码{ |
查询字符串
通过 req.query
传入QueryString
1 | js复制代码{ |
当然你可以把QueryString直接写在req.url
中
1 | css复制代码{ |
路径变量
通过 req.params
传入路径变量
1 | js复制代码{ |
请求头/响应头
通过 req.headers
传入请求头,通过 res.headers
校验响应头
1 | js复制代码{ |
用例数据变量导出与引用
凡是执行过的用例其数据均可以当做已自动导出变量,它们均可以被后续用例引用。
Apitest 中可以使用 @eval
注解引用用例数据。
比如上面例子中setCookies.res.headers["set-cookie"]
,就是引用前面setCookies
用例的set-cookie
响应头数据。
表单: x-www-form-urlencoded
1 | js复制代码{ |
表单: multipart/form-data
结合 @file
注解实现文件上传
1 | js复制代码{ |
GraphQL
1 | js复制代码{ |
http(s)代理
1 | js复制代码{ |
Apitest 支持通过 HTTP_PROXY
HTTPS_PROXY
环境变量开全局代理
多个接口服务地址
1 | js复制代码{ |
自定义超时
你可以设置客户端超时,影响所有使用该客户端的接口
1 | js复制代码{ |
你也可以为某个用例设置超时
1 | js复制代码{ |
环境变量传递数据
1 | js复制代码{ |
mock数据
1 | js复制代码{ |
Apitest 支持近40个mock函数。下面列些常用的
1 | js复制代码{ |
用例组
1 | js复制代码{ |
上面的测试文件打印如下
1 | markdown复制代码这是一个模块 |
跳过用例(组)
1 | js复制代码{ |
延时执行用例(组)
1 | js复制代码{ |
重试用例(组)
1 | js复制代码{ |
重复执行用例(组)
1 | js复制代码{ |
如果不在意数据,只想重复执行多少次的话,可以这样设置
1 | js复制代码{ |
强制打印详情
常规模式下,接口如果没有出错是不会打印数据详情的。通过设置run.dump
为true强制打印详情数据。
1 | js复制代码{ |
抽离公用逻辑以复用
首先创建一个文件存储Mixin定义的文件
1 | js复制代码// mixin.jsona |
1 | js复制代码@mixin("mixin") // 引入 mixin.jsona 文件 |
越是频繁用到的数据越适合抽离到Mixin。
自定义函数
某些情况下,Apitest 内置的注解不够用,你可以使用自定义函数。
编写函数lib.js
1 | js复制代码 |
使用函数
1 | js复制代码@jslib("lib") // 引入js文件 |
后记
这里列举了一下Apitest使用示例,详细说明请点击github.com/sigoden/api…查看。
本文转载自: 掘金