经常被种草apifox,终于在上周决定试试看了。
替代postman
说到要替代postman?我首先关注的是导入cURL能不能正常使用,因为postman我用最多的就是这个功能。于是我下载软件后第一件做的事,是试试导入cURL。
嗯~确实可以正常使用,那就过了我设置的及格线了。
至于网络代理什么的,我目前并不要用到,所以就不涉及了。
替代mockjs
这个还是比较吸引我的,按照官方的指导,先创建一个团队,再新建一个项目,在新项目中开始创建接口。(初步试验阶段暂时设置为所有人可见)
首先进入“修改文档”这个tab下,界面分成了四部分,分别是“基础信息”,“请求参数”,“返回响应”,“响应示例”(响应示例在图片上没空间展示)。
智能Mock
先主要关注请求参数和返回响应这两部分,请求参数先设置为需要一个id即可。返回响应也设置一些姓名、年龄、地址之类的。
这里面精彩的在于,当你设置了xxxname之后,mock出来的数据就是看起来像个名字,如果是phone,则会默认给个手机号格式的数据,比如按照我的设置,在下面添加响应示例的时候,我们让他自动生成一个,结果如下:
确实挺棒的!!
奥秘就在于Apifox的智能mock功能。点开“项目设置”-“功能设置”-“智能Mock设置”界面,可以看到软件已经预设了一些匹配规则,我们还可以根据需求自己设置规则。
当然我们也可以想使用哪个规则就使用哪个规则,或者手动写一段mockjs
详细的mock语法参照Apifox-mock语法
高级设置
智能Mock还不能完全满足需求,有时候想要枚举值,设置返回体的长度,默认值,格式等等,都可以在相应的“高级设置”里面设置。
高级Mock--期望
有些接口需要根据入参返回一系列过滤后的数据,比如active,unactive这种场景。高级mock的“期望”功能就可以满足这个要求
比如新建一个getDeptList的接口,我们期望他返回一个list数组。
再切换到“高级Mock”--“期望”界面,新建一个期望。
设置完记得保存,然后我们就可以在运行接口的时候根据入参active的状态(0或者1)得到对应status为unactive或者active的数据了。
注意:图片上有一段话“支持Mock.js、Nunjucks语法”,鼠标hover上去有一段示例代码,把它修改一下,适配我们现在的接口设置:
{
"list": [
{% for i in range(0, 10) -%}
{
"deptName": "@csentence(5)",
"id": {{i}},
"status": "active"
},
{%- endfor %}
],
"page": 4,
"total": 51
}
可以把之前json内容替换为这段代码,同样可以获得我们需要的数据,而且更灵活。
高级Mock--脚本
还有一些情景也比较常见,比如获取列表的时候一般还会需要带上page,pageSize,接口要根据入参返回对应长度和页面的数据,这时候就要用到高级Mock的自定义脚本功能了。
注意: 规则匹配优先级:高级 Mock 里的期望 > 自定义 Mock 脚本,即如果匹配了期望,就不会在匹配到自定义的Mock脚本。
高级Mock的自定义脚本功能可以参考官方文档Apifox-高级mock 这里先贴上我的脚本以供参考
var MockJs = require('mockjs');
var responseJson = fox.mockResponse.json();
var total = 53
var page = Number(fox.mockRequest.getParam('page'))
var pageSize = Number(fox.mockRequest.getParam('pageSize'))
responseJson.page = page
responseJson.total = total
if(page * pageSize <= total){
responseJson.list = []
for(let i =0 ;i<pageSize;i++){
responseJson.list.push({
deptName: MockJs.mock('@csentence(5)'),
id: MockJs.mock('@natural'),
status: MockJs.mock('active'),
index: i
})
}
}else{
responseJson.list = []
var count = pageSize - (page * pageSize - total)
for(let i =0;i<count;i++){
responseJson.list.push({
deptName: MockJs.mock('@csentence(5)'),
id: MockJs.mock('@natural'),
status: MockJs.mock('active')
})
}
}
responseJson.pageSize = pageSize
fox.mockResponse.setBody(responseJson)
思路打开后发现Apifox的mock功能确实是很强大了,还有个“数据模型”的功能,之前都没有提到,就是提取一个公用的数据类型,另外接口运行之后可以保存为各种用例,方便下次查看。
替代swagger
要替代swagger的接口文档功能,可以用Apifox的在线分享功能
获取链接后在浏览器打开:
界面和内容还是挺清晰明了的。
至于swagger的接口调试功能,应该可以通过在项目里面添加成员实现。
关于jemeter
这里不涉及
总结
总而言之个人感觉还是挺好的软件,希望更多人用起来。以上是几天的体验心得,多看看官网应该还有收获。点击查看更多官方文档