利用YAPI和持续集成CI工具进行接口自动化测试


YAPI是一个高效、易用、功能强大的 api 管理平台,可以在上面进行接口的集中管理,并且支持直接导入和自动更新swagger的接口数据。

YAPI导入swagger的接口数据

目前大多数的开发写接口文档都会使用swagger。YAPI很好的兼容了这点,可以直接从swagger导入数据。
首先在YAPI中创建一个项目,然后选择数据管理,如下图所示,导入swagger。

如何获取swagger的json连接呢。swagger有2个版本,获取方式分别如下图所示。


编写测试用例

导入完成之后,有些接口可能需要配置一些请求头之类的,这个就需要单独调整了。目前swagger导入的时候,不会导入认证用的请求头信息。这就需要你自己调整了。这里就不过多的描述了,可以去看yapi的文档。

配置完接口之后,切换到测试集合标签。在这里添加测试集合。把之前的接口添加进来。通常先添加登录接口,获取认证,然后再添加其他的接口。

YAPI可以传递请求参数的,并且是由上至下的请求顺序。所以顺序很重要。这里有官方文档可以参考。这里我附上地址供参考:YAPI测试集合教程

添加测试环境

有时候我们会有多个环境,比如测试环境、开发环境、预发布环境、生产环境等。在项目的设置中,我们可以添加多个环境,并且配置一些这个环境的全局参数,比如如果有AB测试,是通过Header区分的,就可以在这里配置。界面如下图所示:

接入CI实现自动化

编写好之后,需要先运行一次,测试一下看看自己编写的测试用例是否通过,通过了,就可以接入到ci中运行了。在测试集合界面选择服务端测试,可以得到一个链接,如下图所示。

这里可以用脚本或者其他的程序通过get请求来请求这个URL,实现自动化。这里我写了一个插件,并且做好了docker镜像,可以直接使用,附上github地址:drone_yapi_test

初学go语言,代码写的有点烂,欢迎大佬pr

插件的使用方法很简单。直接docker运行的话,就是下面这样:

docker run --rm \
  -e PLUGIN_HOST=http://yapi.com.cn \
  -e PLUGIN_TOKEN=ab1058076e0945cf14 \
  -e PLUGIN_ID="11,31,15" \
  -e PLUGIN_ENV="env_11=网关地址" \
  registry.cn-hangzhou.aliyuncs.com/lm93129/drone_yapi_test:latest

这里有4个参数。我来解释下:

  • PLUGIN_HOST这个就是yapi的地址,记得地址不能是https://yapi.com.cn/ 这种以/结尾的
  • PLUGIN_TOKEN这个就是你yapi账户的token
  • PLUGIN_ID这个是你测试集合的ID
  • PLUGIN_ENV这个就是你的测试集合要运行的环境

怎么获取上面的四个参数呢?其实很简单,首先host就不用说了。其它的参数都可以通过上面我们获取到的那个URL提取出来。我这里的示例上,ID是有多个的,这里解释下,因为我们可能需要运行多个测试集合,所以当你输入多个ID的时候,插件就会按顺序运行每个测试集合。

接入到drone-ci

由于我用的是drone这个ci工具,所以这里演示下这个插件在drone里面是怎么运行的。drone中的pipeline写法如下:

  - name: yapi-test
    image: registry.cn-hangzhou.aliyuncs.com/lm93129/drone_yapi_test:latest
    settings:
      host: http://yapi.com.cn/
      id: [11,19]
      token: ab105800479fdb69cd8f485f86b7776e0945cf14
      env: env_11=网关地址

然后运行的结果呢,就是下面这样:

如果过程中有不通过的接口,ci就不通过,然后就会触发ci的钉钉通知。

接入其它的ci程序

对于其它的ci程序接入,可以参考上面的docker运行方式进行接入。不过要求就是需要支持docker。现在绝大多数的CI应该都支持docker了。

后话

这个插件还是有一些不完善的地方的。以后可能还会更新一些版本,如果有更好的建议欢迎提issue和pr。

之后会写一些drone这个持续集成工具的使用。我挺喜欢这个工具的,感觉很方便。