YApi是去哪儿移动架构组开源的API管理系统,是一款api管理平台。
一,yapi相关信息与教程
示例地址:http://yapi.demo.qunar.com/
使用教程:https://hellosean1025.github.io/yapi
二,插件安装:
cross-request_v3.0,谷歌插件:cross-request_v3.0 下载后安装到谷歌浏览器即可:
安装流程:
a,下载,解压;
b,chrome 输入 chrome://extensions
打开扩展页;
c,开启开发者模式;
d,加载已解压的程序源,即可看到如下页面;
使用:点击 cross-request 背景页, 打开 network 就能看到新发起的请求信息
三,mock使用
Mockjs脚本编写:http://mockjs.com/examples.html
1,常用占位符功能详述
@integer(min?, max?)
返回一个随机的整数。
- min:可选参数,整数最小值。
- max:可选参数,整数最大值。
例:
@integer
//--> 1686805249110932
@integer(10,100)
//--> 26
@float( min?, max?, dmin?, dmax? )
返回一个随机浮点数。
- min:可选,整数部分最小值。
- max:可选,整数部分最大值。
- dmin:可选,小数部分最小长度。
- dmax:可选,小数部分最大长度。
例:
@float
//--> 1924364975802932.5
@float(60, 100, 2, 6)
//--> 68.1258
@string
返回随机字串,有如下几种使用方式:
@string @string(length) @string(pool, length) @string(min, max) @string(pool, min, max)
- length: 字串长度
- min: 字串最短长度
- max: 字串最大长度
- pool:表示字符池。如果传入 'lower'、'upper'、'number'或'symbol',表示从内置的字符池从选取。对应关系如下:
lower: "abcdefghijklmnopqrstuvwxyz",
upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
number: "0123456789",
symbol: "!@#$%^&*()[]"
例:
@string(6)
//--> kV(qj4
@string('upper',2,6)
//--> NJKU
@string('123abc!@#', 2,6)
//--> #ab!21
@url(protocol?, host?)
随机生成一个 URL。
- protocol:指定 URL 协议。例如 http。
- host:指定URL域名和端口号。
例:
@url('https', '123.sogou.com')
//--> https://123.sogou.com/ccdkttr
@ip
随机生成一个IP地址。
@timestamp
返回当前unix时间戳
@datetime(format?)
返回一个随机的日期和时间字符串。
- format:生成的日期和时间字符串的格式。默认值为yyyy-MM-dd HH:mm:ss。
例:
@datetime()
//--> 1977-11-17 03:50:15
@datetime('y-M-d H:m:s')
//--> 02-4-23 2:49:40
@pick(arr)
从数组中随机选取一个元素,并返回。
例:
@pick(['this', 'is', 'picker', 'test'])
//--> picker
其他常规就不详细写了,看官方文档或者百度下你啥都知道
2,Pre-request Script脚本再项目中的应用
引用global中的变量---context.storage.sign;
a,获取sign,signed_at, pre设置可直接引用不用添加
console.log(context)
try{
var commonParams = {}
//秘钥
var secretKey = "111111111111111111";
console.debug("secretKey:" + secretKey);
//设置请求时间戳
var signed_at = Math.round(new Date().getTime()/1000);
commonParams.signed_at = signed_at
console.debug("signed_at:" + signed_at);
//请求参数
var data = context.method === 'POST' ? context.requestBody : context.query;
data = Object.assign({
signed_at: signed_at
}, data)
//GET
// if(context.query instanceof Object){
// context.query.each(function(obj){
// if(obj.disabled === undefined) data[obj.key] = obj.value;
// });
// }
//POST
// if(context.requestBody instanceof Object){
// context.requestBody.each(function(obj){
// if(obj.disabled === undefined) data[obj.key] = obj.value;
// });
// }
console.debug("data:" + JSON.stringify(data));
//参数排序
var params = [];
for(var key in data){
if(key != "sign") params.push(key);
}
params.sort();
console.debug("params:" + params);
console.log(params)
//拼装字符串
var str = '';
params.forEach(function(value){
str += value;
data[value] = data[value] ? data[value].toString() : "";
//if(data[value].indexOf("{{")!= -1){
// str += data[value].replace(new RegExp('(\{|\})', "g"),"");
//}
//else{
str += data[value];
//}
});
console.log(str)
str = secretKey + str + secretKey;
console.debug("str:" + str);
//生成签名
var sign = context.utils.md5(str).toString();
commonParams.sign = sign;
if (context.method === 'POST') {
context.requestBody = Object.assign( commonParams, context.requestBody)
} else {
context.query = Object.assign( commonParams, context.query)
}
}catch(err){
console.error("Pre-Request Script " + err.name + ":" + err.message);
}
b,mockserver,基础使用
生成mock数据
四,YAPI优缺点
优点
颜值高;安装简便;集成WIKI、接口编写、接口自动化测试于一体,更新非常及时;支持权限管理;支持swagger等其他API管理工具的格式数据导入;支持LDAP、SSO、CAS等登录方式;支持集群。
缺点
(1)接口返回值只能设置一个模板
有时候我们希望正确返回设置一个模板、错误返回设置一个模板,这是swagger可以做到的,而YAPI无法做到
(2)接口模板必须复制粘贴
不像swagger解耦合一样,一处配置处处运行,例如配置“分页模板”,然后每个分页只需要引用一下就好了,修改起来只需要修改一次。而YAPI目前只有复制粘贴。
已经有人提issue了:
(3)测试功能太鸡肋
只能做冒烟测试,给数据、返回期望数据。无法编写测试逻辑(如果返回XX则跳到XX),无法返回多个值(如果200则XX,如果404则XX),也就无法编写单元测试了。
五,总结
个人+会议总结
yapi接口管理平台探讨--会议记录
简单总结会议:yapi接口管理平台,在开发偏敏捷的情况下,对接口的规范性,前后端联调便捷性,冒烟测试、线上回归,起到了积极作用,但对于测试来说,测试功能比较鸡肋。
1,mockserver方案:解决前期模拟测试数据,便于调试;
该平台的帮助:
2,服务端接口开发:规范后台api文档,丰富了开发自测方案,间接提高开发质量;
3,前后端联调:减少联调沟通成本;
4,测试方面:更好的进行接口测试,接口冒烟测试,以及线上验收测试;
1,文档管理方面:接口历史文档查看和管理,无法操作;目前来看存在的问题有如下几个方面:
2,接口关联性方面:接口返回数据的获取和下一个接口使用,不易用;
3,变量管理+前置脚本调试方面:前置脚本sign或其他参数获取,做为公共变量或私有变量传递,不易用;
4,版本管理:目前tag更多的是标签作用;
5,自动化方面:异常用例管理和编写,局限性过大,不易进行;
6,协议局限性:websocket等类似协议接口无法测试;
以上为,会议简要总结,有问题可随时沟通;