前面文章我们已经围绕微服务展开,缺少一个关键前置流程,那就是API接口设计,而在API接口设计开始前本篇先推荐一个非常好用的国人开发工具,它就是Apifox,免费只需注册就可使用,如需私有化部署再购买,绝大部分人使用场景都可直接使用免费版,无任何限制,相当给力。相信大部分API设计会采用Swagger或Yapi管理 API 文档,后端开发人员肯定是使用过Postman来做API接口联调(界面是英文版,如果要汉化还得另外处理)、而同时前端开发人员也会使用Mock.js的Mock API 来模拟接收后端返回数据进行同步开发,测试人员使用JMeter做API自动化测试等等。
不用惊讶,Apifox提供一整套解决方案,,Apifox = Postman + Swagger + Mock + JMeter。Apifox 通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好 API 文档,API 调试、API 数据 Mock、API 自动化测试就可以直接使用,无需再次定义;API 文档和 API 开发调试使用同一个工具,API 调试完成后即可保证和 API 文档定义完全一致。高效、及时、准确!
官网说明特性包含API 文档设计、API 调试、API 自动化测试、API 数据 Mock、CI 持续集成、数据库操作、自动生成代码、支持 HTTP、TCP、RPC、数据导入/导出、团队协作。如下为官网首页部分功能特性,详细可以查阅官网
Apifox前期可称为Apifirst,实现了以下几个亮点功能
设计阶段
开发阶段
Mock 数据
进入开发,无需手写 mock 规则。接口用例
调试开发中接口,只要所有接口用例调试通过,接口就开发完成了。如开发过中接口有变化,调试的时候就自动更新了文档,零成本的保障了接口维护的及时性。接口用例
。接口用例
测试接口。联调和测试阶段
集合测试
功能进行多接口集成测试,完整测试整个接口调用流程。Mock 数据
切换到正式数据
,联调通常都会非常顺利,因为前后端双方都完全遵守了接口定义的规范。官网提供客户端安装版本和 Web 端版本使用,官网也推荐使用客户端版本,支持Windows、MacOS、Linux,开始下载 Windows(64 位)的版本,安装即可。
官网文档地址 https://www.apifox.cn/help/
Apifox B站视频 https://space.bilibili.com/1102302972?spm_id_from=333.337.search-card.all.click
官方提供非常详细的使用文档,且部分还有视频教程,此外apihub是一个开放 API 共享平台,可以找到更多公开 API 项目。Apifox在bilibili上也有一些教程视频合集。
双击启动Apifox后,可通过邮箱注册一个账号,登录后主页提供我的团队、APIHub、我的收藏、最近访问四大块功能。在示例团队里有一个宠物店的示例项目,可以详细参考学习,我们下面则以一个实际操作流程来学习下Apifox整体使用。
第一步我们先创建团队,名称为ITXS团队,点击保存。
邀请成员可设置其团队的权限和对应项目的项目权限
受邀请成员在通知栏中点击接受即可
在团队成员权限中可以修改成员的权限和移除成员。
创建选课系统示例项目
数据模型是可复用的数据结构
。在设计数据结构时可以在数据类型
直接选择已经定义好的数据模型
。管理数据模型,在使用数据模型
前,需要先建立可复用的数据结构
。如下图,根据项目需要,可以先在数据模型
下新建,也可以简单的管理不同数据模型间的关系。数据模型之间也可以相互引用。
当下接口需要部分引用数据模型
时,可以在引用的情况下修改,并且不影响原数据模型
数据模型
中的某个字段时,可以点击隐藏字段
,则接口文档中就不会显示了数据模型
中的某个字段,特殊编辑时,可以点击取消关联
。当然后续也可以恢复关联
数据模型
,并支持数据模型
之间拖拽排序点击直达进入选课系统示例项目,接口创建学生分组,数据模型中也创建基础和学生分组,在基础分组中通过在根节点上点击+号逐个字段创建好系院数据模型,最后点击保存Depart数据模型。
基础分组继续创建专业数据模型,在Depart数据模型是哪个选择复制,输出专业信息,最后点击保存Major数据模型。
基础分组继续创建班级数据模型,点击中间的JSON/XML智能识别/快捷导入,确定后可快捷生成数据模型的字段和推断出字段类型
创建学生数据模型
全局响应
主要用来实现返回响应的复用。通常不同接口在某些情况下会返回相同的数据结构,如资源不存在(404)
、没有访问权限(401)
等,这些建议设置为全局响应
,避免重复编写,放方便统一管理。
项目设置中全局响应创建全局响应,填写如下
再多创建几个全局响应
接口设计即定义接口文档规范(如接口路径、参数、返回值、数据结构等)
参数名
及参数说明等,而不能设置参数值
。参数值、前置脚本/后置脚本 等信息请在接口运行
界面或接口用例
界面填写。保存为用例
,才能将填写的 参数值、前置脚本/后置脚本 等信息保存下来;否则关闭 tab 后,这些信息将会丢失。接口路径
不要包含 HTTP 协议及域名
,这部分建议在 环境管理 的前置URL
里设置,接口调试时的 URL 会自动加上当前环境的前置URL
。HTTP 协议及域名
的,系统也能支持,但不建议这么做。接口调试时,系统如检测到接口路径是以http://
或https://
起始的,会自动忽略当前环境里前置 URL。Path 参数
是以大括号包裹起来表示,而非冒号起始表示。正确示例:/pets/{id}
,错误示例/pets/:id
。Query 参数
(即 URL 中 ?
后的参数),Query 参数在下方请求参数
部分填写。在学生分组下创建查询学生信息接口
点击修改文档,在根节点下添加响应的字段数据,点击保存按钮
添加一个响应示例,点击自动生成,可以看到Apifox已经给我们Mock出来很多正常使用的数据。
点击运行,切换为Mock服务,点击发送,响应数据内容如下,这个是Mock出来的数据,最后点击保存为用例为后续测试复用。
接口设计
读取,无需手动输入,参数值默认会读取接口设计里的示例值
,可手动修改。发送
按钮即可运行。保存为用例
是将当前填写的参数保存起来,方便下次或者其他人用来调试接口。接口用例
会显示在左侧树状菜单里接口的下一级。运行
后都保存为用例
,后续用接口用例
来调试接口是非常高效的。参数正确
用例、参数错误
用例、数据为空
用例、不同数据状态
用例等等。返回响应
是用来给系统校验
接口请求后返回的数据是否符合对应 Response 里定义的数据结构
,免去人眼识别,提高效率和准确性。返回响应
的数据结构,自动分析运行后返回的数据是否正确,并且给出详细的错误提示。后置操作
支持添加断言
,可对接口返回的数据(或响应时间)设置断言,判断是否符合预期。后置操作
支持添加提取变量
,可从接口返回结果里提取数据,设置到变量(临时变量/环境变量/全局变量),方便其他接口运行的时候直接使用。选择全局响应记录不存在,点击发送测试,结果如下,最后保存为记录不存在用例。
回到文档TAB页,可以看到已经MOCK区域有两条记录
复制URL我们直接到浏览器上访问下,可以看到已经在本地启动Mock服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LUSnGoD-1651340301671)(F:creationmarkdownarticle宝藏发现之API接口高效协作神器Apifox宝藏发现之API接口高效协作神器Apifox.assetsimage-20220430195909497.png)]
实时更新接口的状态,不同状态的颜色不同,有利于团队协助进行,相应人员可以根据状态进行筛
需要更多状态管理时可以到项目设置,功能设置中借楼状态进行设置
创建记录不存在的测试用例,在接口中切换高级Mock,点击新建期望,设置路径参数为3时作为记录不存在
新建学生信息接口,为Post请求,填写Body数据,在返回响应的全局响应中关闭,状态码为201,点击保存(记得修改文档后一定要点击保存再操作运行)
点击运行并保存为成功用例
创建修改学生信息接口为PUT类型,使用json导入参数,保存为接口
创建一个验证错误返回响应
验证错误响应
创建删除学生信息接口类型为DELETE,保存
保存为成功用例接口
在返回响应成功(200)添加code字段,添加响应示例,点击自动生成,并保存为成功用例
快捷请求可以输入完整的URL,填写相关的参数
添加用例有两种方式:从接口导入
和从接口用例导入 (推荐)
复制
和绑定
。将接口用例以复制
的方式导入,接口用例里的参数也会一同复制过来,和原来用例数据相互独立,各自改动后互不影响。将接口用例以绑定
的方式导入,会直接引用原来的用例,两边的改动都会相互实时同步。从接口导入
后,需要手动设置接口参数,否则运行的时候,接口参数是空的。从接口用例导入
后,会同步导入接口用例里的参数,会方便很多。创建测试用例
点击详情,从接口用例导入数据,也可以从接口中导入用例
导入,点击运行
查看测试结果
测试套件
为测试用例
的集合,每个测试套件包含多个测试用例。主要用途:
测试用例
的复用。选择一组测试用例,运行输出测试结果
测试用例
的时候,设置线程数
大于1
即可实现性能测试。线程数
即同时【并发】运行的线程数,每个线程都会按顺序运行选中的所有步骤。和
测试套件可以导出
JMeter`格式数据,然后可以导入 JMeter 做性能测试。测试用例
和测试套件
支持测试数据集。当用例或套件运行时,系统会循环运行数据文件里所有的数据集,并且会将数据集里的数据赋值给对应的变量。
运行
完成后,如图所示,可以看到哪些接口没有通过测试,可以点击对应的接口展开详情;点击更多详情
,可以查看该接口的运行结果,方便定位问题。运行结束后查看之前的测试报告
,也可以导出。
Mock 功能可以根据接口/数据结构定义
、Mock规则配置
、Mock 期望配置
,自动生成模拟数据,且使用者可以根据需要灵活构造各种结构的接口数据。通常情况 Apifox 零配置
即可生成非常人性化的 mock 数据:
image
的string
类型字段,自动 mock 出一个图片地址 URL;包含字符串time
的string
类型字段,自动 mock 出一个时间字符串;包含字符串city
的string
类型字段,自动 mock 出一个城市名。正则表达式
、通配符
来匹配字段名自定义 mock 规则。零配置一些常见字段已经自动mock数据
Apifox Mock 语法完全兼容[Mock.js(数据占位符方式),并扩展了一些 Mock.js 没有的语法(如国内手机号 @phone)。如现有 Mock 语法无法满足需求,建议使用 正则表达式 @regexp来实现灵活的定制。正则表达式基本能满足各种特殊场景的需求。
基本写法
写法 | 说明 |
---|---|
以@ 起始的字符串 |
调用 Mock 语法规则生成对应的数据。 如生成的数据类型和定义的数据类型不一致,则会自动转换。 |
非@ 起始的字符串 |
数据类型为string 时,原样输出。 其他数据类型,会将字符串自动转换到对应的数据类型。 |
特殊字符:null | 数据类型允许为null 时,输出null 。 否则自动转换,如数据类型为string ,输出"null" 。 |
特殊字符:true | 数据类型为boolean 时,输出true 。 否则自动转换,如数据类型为string ,输出"true"。 |
特殊字符:false | 数据类型为boolean 时,输出false 。 否则自动转换,如数据类型为string ,输出"false"。 |
自动转换 是使用 javascript 语言默认数据转换方法进行转换。其他详细可以查阅官网
定义 mock 规则,前面我们接口中已使用自定义mock规则,针对字段Mock设置里选择,还可以像postman一样的自定义脚本
高级设置
里设置的最大值
、最小值
、枚举值
、Partten
、format
,也会作为 Mock 规则使用。接口详情
-高级 Mock
高级 Mock 里的期望
,则不调用自定义 Mock 脚本
。零配置
即可 mock 出非常人性化的数据。设置位置:项目设置
-智能 Mock 设置
的自定义规则
及内置规则
。
正则表达式
、通配符
来匹配字段名自定义 mock 规则。自定义规则
优先级高于内置规则
,可添加自定义规则来覆盖系统内置规则。智能Mock我们在前面查询接口的创建期望也简单介绍了,总体说MOCK功能是非常的强大。
在 API 开发、沟通、协作中,逻辑上是以 API 文档为标准的,但实际操作中,存在以 Word、PDF 格式的文件传来传去的问题。为此我们提倡以在线文档
的形式,提高团队之间的沟通效率,在线分享里新建分享
创建后复制链接发给其他团队就可以使用了
接口修改文档中设置标签,输入则增加标签,保存,然后再左侧可以根据标签进行筛选。
新建分享中可以指定标签设置分享范围
一个项目在不同的阶段会处于不同的环境中,比如开发环境
、测试环境
、生产环境
,通常不同的环境有不同的前置 URL
、接口参数值
等。因环境不同而频繁的更改接口前置 URL 及参数,是非常的麻烦的。 Apifox 的环境管理
功能,只需在不同的环境
设置不同的前置 URL 及参数,在不同环境中测试时,直接切换环境即可。如果默认环境不够用还可以新建环境。
快速切换前置URL,在管理环境比如在测试环境里添加服务,如学生和老师都有不同域名,点击保存
回到查询学生信息接口修改文档,我们看到服务(前置URL)可以选择手动绑定学生服务
这是在测试环境运行可以看到整个请求已经带上前置URL了
后置操作
支持添加断言
,可对接口返回的数据(或响应时间)设置断言,判断是否符合预期。
在运行中后置操作中添加后置操作,断言名称存在,保存用例
运行查看结果,显示断言结果已存在,前置操作也是如此
支持添加
提取变量`,可从接口返回结果里提取数据,设置到变量(临时变量/环境变量/全局变量),方便其他接口运行的时候直接使用。前置操作
、后置操作
支持添加数据库操作
,可读写数据库数据,查询结果可在接口请求参数、断言、自定义脚本等场景中使用。目前支持MySQL
、SQL Server
、Oracle
、PostgreSQL
,未来会支持更多数据库类型。{{allUser[0].name}}
或{{user.name}}
,遵循JSON Path
语法规范,只需将JSON Path
里的$
符号替换为变量名
既可。和编程语言类似,变量是允许在多个地方重复使用的值。不同的接口用例(请求参数、脚本等)可以引用相同的变量值,只需要更改一次变量值,就能改变所有引用了该变量的相关值。使用变量可以大幅提升工作效率。
在新建学生信息结构修改文档,增加body参数,在请求参数的示例值的位置,鼠标移动到输入框上时,会显示一个魔法棒
的图标(动态值有动态变量、常量、变量等设置),选择或者填入变量名,保存后点击运行
在实际请求查看到token的值为全局变量设定的值
官方还提供很多其他的功能,如动态变量、随机参数、全局参数、socket报文接口、导入数据、导入抓包数据、导出数据、代码生成、接口之间传递数据、使用脚本、持续集成、插件等等,这些有兴趣可以前往官网继续学习,好了,本篇就先到这里
**本人博客网站 **IT小神 www.itxiaoshen.com