ApiFox接口自动化测试整体流程
1.流程概览
- 整个Apifox接口自动化测试的流程可以看作是一个从构建、执行到维护的闭环。
2.前期准备
下载并安装桌面版Apifox:Apifox 下载地址。通读登录态(Auth)如何处理 - Apifox 帮助文档
3.导入/同步接口文档
将swaggger接口迁移到apifox中比如当前需要迁移客户销售系统,抓包复制任意接口的协议+服务名 +截止项目的路径名

粘贴到浏览器中拼接上doc.html。抓包复制当前页面的url。

粘贴到Apifox数据源导入中(注意:如果有多个版本的话需要粘贴相应的个数)

4.配置测试环境
- 创建环境:在Apifox右上角的环境管理中,新建一个环境(如“测试环境”)。
- 定义变量:在这个环境中,定义一个变量,比如命名为 base_url,值设置为实际的服务器地址(如 http://localhost:8080 或 https://api.example.com)。
- 引用变量:在后续所有接口的URL中,将写死的域名部分替换为 {{base_url}}。这样,当需要切换到生产环境时,只需修改环境变量base_url的值即可。(以上三点具体详细步骤见官方文档)
- token全局设置:在当前模块的接口根目录的前置操作中写脚本:发送登录接口,并获取token将token值保存为环境变量。(避免每次生成用例都要先跑登录接口获取token)

// 获取当前时间戳(毫秒)
const currentTimestamp = Date.now();
// 从环境变量获取上次存储的时间戳并转为数字
let lastTokenTime = pm.environment.get("last_token_time");
lastTokenTime = lastTokenTime ? parseInt(lastTokenTime) : null;
// 定义过期时间阈值(25分钟)
const EXPIRATION_THRESHOLD = 25 * 60 * 1000;
// 计算剩余有效时间(秒)
if (lastTokenTime) {
const remainingTime = Math.floor((EXPIRATION_THRESHOLD - (currentTimestamp - lastTokenTime)) / 1000);
console.log(`Token有效期剩余: ${remainingTime}秒`);
}
// Token过期判断及更新逻辑
if (!lastTokenTime || (currentTimestamp - lastTokenTime) >= EXPIRATION_THRESHOLD) {
pm.sendRequest({
url: `https://api.xxxxx.com/auth?user=${pm.globals.get("username")}&key=${pm.globals.get("api_key")}`,
method: 'POST'
5.编写单接口用例
单接口测试用例在自动化测试-单接口用例点击要写用例的接口【AI生成用例】或【添加用例】
5.1AI生成单接口测试用例(暂不推荐)
前提条件:当前团队中启用AI功能,并且配置供应商测试连接成功(开发已协助完成,当前的供应商有token免费限时)

在【单接口测试】中选择任意一个接口点【AI生成用例】

结合实际情况选择生成用例的类型,然后点【生成】按钮。

生成后还需要再检查用例是否符合实际场景设计,是否有存在的必要,决定是否点【废弃】。点运行断言的入参、预期值也需要自己再重新修改调整。

以上的操作下来目前并不推荐AI生成用例,原因有三:
- AI生成用例后仍需手动修改调整,没有特别省心省力。
- AI生成用例测试数据自动生成在接口的入参中,不支持CSV等数据驱动,违背自动化测试核心思想。
- 目前大部分AI产品都会收费,消耗token比较快
官方解释AI生成用例的初衷也只是为了生成数据,所以可以用来调试和参考它生成的数据。

5.2手动生成单接口测试用例
数据驱动文档见:数据驱动测试 - Apifox 帮助文档
实例演示:自动化单接口和集成测试设计用例的场景思路与手工测试一样,以新增门店接口为例,单接口测试用例的正向用例可以不用覆盖,一方面后续的集成测试会覆盖到,不必做重复工作。另一方面为避免自动化测试数据污染,如果集成测试不覆盖当前接口的正常用例,单接口的正向测试用例新增后需要在后置操作中使用sql删除。具体见:xxxx
用例名称用变量,取csv文件中对应的值。

入参视情况而定,如果枚举值有业务上的要求,比如业态这种适合输入静态值。再比如业态门店名称这种在参数的数据生成器中没有合适的类型也可以输入静态值。

如果是门店名称、门店编码这种可以用数据生成器生成然后把变量名复制到csv中。以上所有入参都已变量名的方式填写到接口的参数值中。
同理,因为每条数据代表一个测试场景,那么断言名称和断言结果也是以变量的形式存储在页面中,取csv中对应的值。

导入csv数据,运行,查看运行结果。

点击任意运行结果的用例名查看断言名称和断言结果都正确。

可以在测试套件中选择当前的单接口用例。这就是一个完整的手动生成单接口测试用例,并添加到测试套件的全部过程。


6.编写集成测试用例
集成测试测试用例在自动化测试-测试场景-点击新建测试场景。
实例演示:举一个简单场景新增客户新增-查看-更改-删除。当前场景不会产生测试脏数据,所以跑完用例不需要贴别处理。

新增客户新增-查看-更改-删除这个链路设计测试用例不涉及判定表多个场景测试数据,不存在后期维护困难的问题,所以可以不用csv数据驱动,直接填入数据生成器的动态值或手动填入静态值。
接口之间的数据传递可以通过存储环境变量来实现,新增客户返回客户id。

后置操作中提取变量存储在环境变量中。

在下一个接口直接取环境变量

其他接口以此类推。
新增自动化测试用例的优先级:集成测试用例>单接口测试用例。因为集成场景往往跨越多个模块,更容易回归覆盖到缺陷。当前系统集成测试覆盖完成后再补充完善单元测试。
7.组装测试套件
这里新增了两个测试套件,自动化集成测试和单接口测试。集成测试套件添加测试场景中的集成用例,单接口测试套件添加单接口测试用例中的单接口测试用例。

8、CI/CD持续集成
前提条件:云效新增流水监听测试环境的流水线运行成功事件,部署触发apifox脚本(开发已协助完成)https://flow.aliyun.com/groups/136964?page=1

生成命令行的具体操作步骤见:
通过 CLI 运行包含云端数据库连接配置的测试场景 - Apifox 帮助文档
将命令行复制进部署触发apifox脚本就节点中的部署脚本中


如果要关闭当前系统自动化的CI/CD,点第一个节点,关闭触发事件即可。

后续建其他CI/CD复制这个流水线,然后修改流水线名称和部署脚本即可。

9、定时任务
前提条件:部署好通用runner。(开发已协助完成)
选择需要新增定时任务的套测试套件

按照实际情况新建定时任务。

注:CI/CD持续集成、定时任务触发适用场景见《接口自动化测试思想和规范》的第三部分。
10、查看报告
自动化用例跑出来需要及时查看失败原因,可能有数据、配置、或者逻辑变了导致的,需要及时更新自动化测试脚本。也有可能是bug,如果是bug及时提交云效反馈给开发。
更多推荐


所有评论(0)