愈来愈多的应用基于先后端分离构建,后端提供数据接口,前端调用接口返回 json 数据渲染到 UI,这个时候保证后端接口数据正确性变的越来越重要,接口测试就是来解决这个问题。不少团队,接口测试就是手动运行接口,肉眼比对接口返回的数据,这样的操做流程效率低下,容易出错。去哪儿移动架构组自研了接口管理平台 YApi 解决这一痛点,用户只须要在可视化 GUI 下,配置每一个接口的入参和对 RESPONSE 断言,便可实现对接口的自动化测试,大大提高了接口测试的效率。下面开始详细解决如何使用 yapi 接口管理平台自动化测试接口。前端
若是您还未部署 yapi 接口管理平台,可先去示例站点试用。jquery
在建立完项目和接口后,须要进入到测试集页面,导入须要测试的接口。git
须要学习的基础概念主要包含测试集、Pre-Script 、Test-Script 三方面。github
在平时的开发过程当中,常常遇到的一个问题是每次调试接口都须要从新填写参数,YApi测试集可以保存以前填写的参数,方便下次的调试。每一个的请求参数还能够经过前面已请求的接口数据读取,或填写mock随机字符串,经过设置断言脚本验证返回数据的正确性。ajax
Pre-Script 包括请求参数处理脚本和响应数据处理脚本两部分。经过自定义 js 脚本方式改变请求的参数和返回的 response 数据。他的使用场景以下:json
以 jquery ajax 为例,假设当前的请求参数是后端
{
url: '/api/user?id=1',
method: 'POST',
headers: {
xxx: 'xxx'
},
data: {
type: 1
}
}
复制代码
那么公共变量 context 包含如下属性:api
context = {
pathname: '/api/user',
query: {
id: 1
},
requestHeader: {
xxx: 'xxx'
},
method: 'POST',
requestBody: {
type:1
}
}
复制代码
假设咱们须要在 url 增长一个 token 参数,能够写以下自定义脚本:bash
在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含如下属性:架构
context = {
pathname: '/api/user',
query: {
id: 1
},
requestHeader: {
xxx: 'xxx'
},
method: 'POST',
requestBody: {
type:1
},
responseData: {
a:1
},
responseHeader: {
content-type: 'application/json'
...
}
}
复制代码
假设咱们须要修改响应数据 responseBody a 的值为 2,能够填写以下自定义脚本:
经过自定义脚本断言接口参数或返回 response 数据,在接口用例页面点击 Test 编辑。
assert(value)
判断 value 是否为 truth, 例如 assert(1) 经过, assert(0) 不经过,只要 value 不是 null, 0, false等值验证经过
assert.equal(actual, expected)
判断 actual 是否等于 expected,例如 assert(1, 1)经过
assert.notEqual(actual, expected)
判断 actual 是否不等于 expected
assert.deepEqual(actual, expected)
假设: actual = {a:1} 是一个对象,即使 expected = {a:1},若是使用 assert.equal 可能也是不相等的,由于在 js 引用的只是对象的一个指针,须要使用 assert.deepEqual 比较两个对象是否相等
assert.notDeepEaual(actual, expected)
深度比较两个对象是否不相等
http 状态码
http request params, 合并了 query 和 body
返回 response body
返回 response header
记录的 http 请求信息,假设须要获取 key 为 555 的接口参数或者响应数据,可经过 records[555].params 或 records[555].body 获取
log(message) 函数,调试时使用,log 信息仅仅在断言失败后打印
assert.equal(body.errcode, 0)
assert.equal(body.data.group_name, 'testGroup')
assert.equal(status, 200)
复制代码
YApi 除了支持常量字符串外,还支持 mock 随机字符串和变量字符串。
Mock 参数每次请求都会生成随机字符串,支持 mockjs 全部占位符
YApi 提供了强大的变量参数功能,你能够在测试的时候使用前面接口的 参数
或 返回值
做为 后面接口的参数
,即便接口之间存在依赖,也能够轻松 一键测试~
格式:
$.{key}.{params|body}.{path}
复制代码
例如:现有两个接口,分别是“导航标题”和“文章列表”
文章列表接口须要传参数: 当前标题(id)
,而这个 id 须要经过 导航标题
的返回值获取,这时应在 文章列表
的参数输入框中根据前者的 key 找到对应 id。
导航标题
的参数和返回值有以下结构:
参数:
返回值:
则 文章列表
的参数能够以下配置:
其中 $. 是使用 动态变量 的标志,$.269.params 即表示 key 值为 269 用例的请求参数,$.269.body 即表示 key 值为 269 用例的返回值。
Tips: 上下拖动测试集合的列表项能够调整测试的顺序。
目前yapi中的query
,body
,header
和pathParam
的输入参数已经支持点击选择功能。无需本身填写表达式,只需在弹窗中选择须要展现的表达式便可。 输入选项包括常量
,mock数据
,在测试集合中也支持变量
选择。 具体用法:单击编辑按钮打开表达式生成器,点击须要的数据建立表达式,这里也能够实时查看表达式结果。
在测试列表能够看到每一个测试用例的 key,还有 开始测试、报告等功能 点击开始测试会按照 case 定义的参数从上往下一个一个进行测试,若是顺序有问题,能够拖动调整 测试完成以后,点击报告查看该次请求的结果
YApi 自动化测试大大简化了接口测试数据准备,和验证环节,目前去哪儿测试团队已经开始使用。将来 YApi 将会持续优化自动化测试功能,但愿你们提出你们宝贵的意见。
开源接口管理平台 YApi 官网
Github: YApi github