一、为什么要介绍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进行安装
image-1676297879666

此外项目无需引入apifox任何依赖,apifox是通过java doc来生成相关文档。

(2)创建API访问令牌
在Apifox客户端找到【账号设置】-> 【API令牌访问】->【新建】进行令牌,并在弹出框中复制令牌。

(3)设置API访问令牌
在IDEA的Settings中找到ApifoxHelper,并在【API访问令牌】输入框录入在Apifox客户端复制的令牌。
image-1676298257528

(4)创建项目
在Apifox上创建项目,用于归类不同项目文档,具体点击【个人空间】的【新建项目】按钮并输入相关信息即可。

2、根据已有代码生成文档

右击IDEA中的Controller类,在弹出框中点击【Upload to Apifox】选项,
image-1676298386610
如果是第一次提交,则需要在弹出框中输入项目ID,具体Apifox上的项目设置上找。
image-1676298836143
image-1676298917833

那么可以在Apifox上查看生成的接口文档。
image-1676299125983

3、在线调试

image-1676299594913
对于生成的接口文档支持多种调试环境,如上图所示,比如开发人员可以选择【开发环境】,其他人员比如产品同学,可以选择【本地Mock】环境,并不需要提前准备好Mock环境,Apifox会根据我们的设置准备好Mock数据。

4、API文档

项目中与客户业务系统进行对接通常采用API接口的方式,这种方式的特点是客户无需登录,而是把认证信息放在HTTP Header请求头上。
image-1676299802138
比如上面截图中,用户认证信息存放在HTTP Header的Authorization字段和查询字段sig中,在调试的时候,可以先预设这两个属性的值,可以在全局变量和全局参数中进行预设置,而且支持md5、sha1等信息摘要算法。
image-1676299975106
在本例子中,请求参数如下,包括了sign参数,用于对请求参数数据进行签名计算。
image-1676300115032
那么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 信息。

例如下面截图,在测试业务接口时,只需要执行下登录接口完成用户登录即可。
image-1676300547710

6、自动化测试

image-1676300651175
我们在测试接口时,根据不同的测试结果保存为不同的接口用例(类似于单元测试),方便自己测试,也方便团队其他成员测试。

(1)创建测试用例
image-1676300805967
在【自动化测试】模块下,添加【+】创建不同的测试用例,此类用例通常用于一种功能上,比如截图中的【获取手机号码】,然后选择之前保存的接口用例即可,此外,我们可以对测试用户进行压测,如下图所示。
image-1676300936006

(2)创建测试套件
如果说测试用例适用于某个功能,则测试套件则适用于某种场景,它有多个测试用例组成,与测试用例一样,测试套件也是可以进行压测。
image-1676301030071

(3)测试报告
运行测试用例或者测试套件后,可以在【测试报告】页面上查看对应的执行结果。
image-1676301073179

7、接口设计

对于新的功能需要,通常是设计先行,也就是先设计好功能,编写好文档再进行开发,那么在Apifox设计文档是一件比较容易的事情,包括定义好接口地址、请求参数和响应参数等。
image-1676301249672
对于设计好的接口文档,可以通过分享的方式分享给其他同事。
image-1676301338677
image-1676301440338

打赏
支付宝 微信
上一篇 下一篇