一、为什么要介绍apifox?
你是否这样开发API接口?
(1)在word文档上设计API接口(或者有些同学是写完代码再输出API文档)
(2)在IntellJ IDEA上进行开发,并引入swagger/knife4j,如下面代码片段
@ApiOperation(value = "用户登录")
@ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "用户名", required = true),
@ApiImplicitParam(name = "password", value = "密码", required = true)
})
(3)在Postman进行测试(或者编写单元测试进行测试)
(4)用JMeter进行压测(可选)
那么以上的方式有什么问题呢?主要是的问题有:
(1)测试效率低下
从设计到测试要用到的工具有手写文档 + swagger(knife4j) + postman + JMeter,多个工具组合使用,不方便环境切换,此外还有其他问题,比如:
(a)手写文档:耗时长,而且开发过程中有可能会变动
(b)引入 swagger(knife4j) :代码侵入性强,增加了很多文档代码。
(c)用postman测试:需要手动录入所有数据,包括参数以及Mock数据。
(d)用JMeter压测:需要手写测试代码。
(2)联调效率低下
与你联调的同事在开发的时候需要看到设计文档或者swagger生成的文档,那么在你开发完成功能之后,对方需要先自己准备Mock数据,或者自己开发一个模拟端进行接收情况。
基于以上的问题,这里介绍apifox,它是一款API 设计/开发/测试工具,更准确的说:Apifox = Postman + Swagger + Mock + JMeter,它能够解决上面所描述的各种问题,提高工作效率。
更具体的介绍可以查阅官网:https://www.apifox.cn/
二、安装apifox
(1)下载桌面版安装包进行安装
(2)Web免安装
通过微信扫码注册账号即可。
三、简单使用
1、环境准备
(1)安装IntellJ IDEA插件
在IDEA的Plugins Marketplace查询apifox helper进行安装
此外项目无需引入apifox任何依赖,apifox是通过java doc来生成相关文档。
(2)创建API访问令牌
在Apifox客户端找到【账号设置】-> 【API令牌访问】->【新建】进行令牌,并在弹出框中复制令牌。
(3)设置API访问令牌
在IDEA的Settings中找到ApifoxHelper,并在【API访问令牌】输入框录入在Apifox客户端复制的令牌。
(4)创建项目
在Apifox上创建项目,用于归类不同项目文档,具体点击【个人空间】的【新建项目】按钮并输入相关信息即可。
2、根据已有代码生成文档
右击IDEA中的Controller类,在弹出框中点击【Upload to Apifox】选项,
如果是第一次提交,则需要在弹出框中输入项目ID,具体Apifox上的项目设置上找。
那么可以在Apifox上查看生成的接口文档。
3、在线调试
对于生成的接口文档支持多种调试环境,如上图所示,比如开发人员可以选择【开发环境】,其他人员比如产品同学,可以选择【本地Mock】环境,并不需要提前准备好Mock环境,Apifox会根据我们的设置准备好Mock数据。
4、API文档
项目中与客户业务系统进行对接通常采用API接口的方式,这种方式的特点是客户无需登录,而是把认证信息放在HTTP Header请求头上。
比如上面截图中,用户认证信息存放在HTTP Header的Authorization字段和查询字段sig中,在调试的时候,可以先预设这两个属性的值,可以在全局变量和全局参数中进行预设置,而且支持md5、sha1等信息摘要算法。
在本例子中,请求参数如下,包括了sign参数,用于对请求参数数据进行签名计算。
那么Apifox支持脚本的方式对请求参数进行运算处理,具体代码如下:
var cryptoJs = require("crypto-js");
var body = pm.request.body.toJSON();
var bodyJSON = JSON.parse(body.raw);
var sign = cryptoJs.MD5(bodyJSON.appid + 'v1.0.0' + bodyJSON.msgid + bodyJSON.systemtime + bodyJSON.strictcheck + bodyJSON.token + 'e388366fc6172ee782a5a9a373bfd8c5').toString().toUpperCase();
bodyJSON.sign=sign;
pm.request.body.update(JSON.stringify(bodyJSON, null, 2));
5、Web管理接口
现在主流的开发模式为前后端分离,前端和后端通过API接口进行交互,此类接口通常需要先登录,才能正常访问。
对于通过Session/Cookie保持会话的方式,Apifox 会自动保持登录态。先执行登录接口,执行完成后全局 Cookie 会自动保存返回的 Session/Cookie 信息,然后运行其他接口,会自动带上 Session/Cookie 信息。
例如下面截图,在测试业务接口时,只需要执行下登录接口完成用户登录即可。
6、自动化测试
我们在测试接口时,根据不同的测试结果保存为不同的接口用例(类似于单元测试),方便自己测试,也方便团队其他成员测试。
(1)创建测试用例
在【自动化测试】模块下,添加【+】创建不同的测试用例,此类用例通常用于一种功能上,比如截图中的【获取手机号码】,然后选择之前保存的接口用例即可,此外,我们可以对测试用户进行压测,如下图所示。
(2)创建测试套件
如果说测试用例适用于某个功能,则测试套件则适用于某种场景,它有多个测试用例组成,与测试用例一样,测试套件也是可以进行压测。
(3)测试报告
运行测试用例或者测试套件后,可以在【测试报告】页面上查看对应的执行结果。
7、接口设计
对于新的功能需要,通常是设计先行,也就是先设计好功能,编写好文档再进行开发,那么在Apifox设计文档是一件比较容易的事情,包括定义好接口地址、请求参数和响应参数等。
对于设计好的接口文档,可以通过分享的方式分享给其他同事。