共计 3231 个字符,预计需要花费 9 分钟才能阅读完成。
背景痛点:为什么需要自动获取 Token?
在接口测试中,很多 API 接口都需要携带 Token 进行身份验证。如果每次测试都手动获取 Token,不仅效率低下,而且容易出错。尤其是在自动化测试场景下,手动管理 Token 几乎是不可能的任务。

手动管理 Token 的主要问题包括:
- 需要频繁登录系统获取新 Token
- 容易忘记更新过期的 Token
- 在自动化测试流程中无法自动续期
- 团队成员之间难以共享最新的 Token
技术方案:Apifox 的环境变量和脚本功能
Apifox 提供了强大的环境变量和脚本功能,可以完美解决 Token 自动管理的问题。主要利用以下两个功能:
- 环境变量:存储和管理 Token 等共享数据
- Pre-request Script:在请求发送前执行的脚本
- Tests 脚本:在请求完成后执行的脚本
通过组合使用这些功能,我们可以实现 Token 的自动获取、存储和更新。
实现步骤:自动获取 Token 的完整流程
1. 创建环境变量
首先,我们需要创建一个环境变量来存储 Token。在 Apifox 中:
- 点击左侧菜单的 ” 环境 ” 选项
- 选择或创建一个环境(如 ” 开发环境 ”)
- 添加一个变量,例如命名为 ”auth_token”
2. 配置登录接口
找到获取 Token 的登录接口,通常是一个 POST 请求。我们需要在这个接口的 Tests 标签中添加脚本,将返回的 Token 保存到环境变量中。
3. 编写 Tests 脚本
以下是一个完整的 Tests 脚本示例,用于提取 Token 并保存到环境变量:
// 检查响应是否成功
if (responseCode.code === 200) {
// 解析 JSON 响应
const jsonData = pm.response.json();
// 从响应中提取 Token(根据实际 API 调整)const token = jsonData.data.token;
// 将 Token 保存到环境变量
pm.environment.set("auth_token", token);
// 打印日志(可选)console.log("Token 已更新:", token);
} else {console.error("获取 Token 失败:", responseCode.code);
}
4. 在其他接口中使用 Token
对于需要认证的接口,在 ”Authorization” 选项卡中选择 ”Bearer Token” 类型,然后输入 {{auth_token}} 即可自动使用存储的 Token。
代码示例:完整脚本实现
Pre-request Script 示例
在某些情况下,我们可能需要在发送请求前检查 Token 是否有效。以下是一个 Pre-request Script 示例:
// 检查 Token 是否存在
if (!pm.environment.get("auth_token")) {
// 如果没有 Token,先执行登录接口
pm.sendRequest({url: pm.environment.get("base_url") + "/api/login",
method: "POST",
header: {"Content-Type": "application/json"},
body: {
mode: "raw",
raw: JSON.stringify({username: pm.environment.get("username"),
password: pm.environment.get("password")
})
}
}, function (err, res) {if (err) {console.error(err);
} else {
// 保存新 Token
pm.environment.set("auth_token", res.json().data.token);
}
});
}
Tests 脚本增强版
更健壮的 Tests 脚本可以处理各种异常情况:
// 验证响应状态码
pm.test("Status code is 200", function() {pm.response.to.have.status(200);
});
// 验证响应包含 Token
pm.test("Response has token", function() {const jsonData = pm.response.json();
pm.expect(jsonData.data).to.have.property("token");
pm.expect(jsonData.data.token).to.be.a("string").that.is.not.empty;
});
// 保存 Token 到环境变量
const jsonData = pm.response.json();
pm.environment.set("auth_token", jsonData.data.token);
// 设置 Token 过期时间(如果 API 返回 expires_in)if (jsonData.data.expires_in) {const expiresAt = new Date();
expiresAt.setSeconds(expiresAt.getSeconds() + jsonData.data.expires_in);
pm.environment.set("token_expires_at", expiresAt.toISOString());
}
避坑指南:常见问题及解决方案
1. Token 不更新
问题:脚本执行了,但环境变量中的 Token 没有更新。
解决:
- 检查响应数据结构是否正确
- 确保环境变量名称拼写正确
- 查看控制台日志是否有错误
2. Token 过期问题
问题:Token 过期后没有自动刷新。
解决:
- 在 Pre-request Script 中检查 Token 过期时间
- 设置定时任务定期刷新 Token
- 对于长期运行的测试,实现 Token 自动续期逻辑
3. 环境变量不共享
问题:团队成员看不到你设置的 Token。
解决:
- 确保使用的是共享环境而非本地环境
- 将环境配置导出并分享给团队成员
- 考虑使用 Apifox 的团队协作功能
进阶应用:自动化测试集成
将自动 Token 获取集成到自动化测试流程中,可以大大提高测试效率。以下是几个进阶应用场景:
1. 测试集合运行前获取 Token
在测试集合的 Pre-request Script 中获取 Token,确保所有测试用例都能使用有效的 Token。
2. 多环境支持
为不同环境(开发、测试、生产)配置不同的登录凭据和 Token 变量。
3. Token 自动刷新
实现逻辑在 Token 接近过期时自动刷新:
// 检查 Token 是否即将过期
const expiresAt = new Date(pm.environment.get("token_expires_at"));
const now = new Date();
const threshold = 300; // 5 分钟阈值
if ((expiresAt - now) / 1000 < threshold) {
// 执行 Token 刷新逻辑
pm.sendRequest({url: pm.environment.get("base_url") + "/api/refresh",
method: "POST",
header: {"Authorization": "Bearer" + pm.environment.get("auth_token")
}
}, function (err, res) {if (!err) {pm.environment.set("auth_token", res.json().data.token);
}
});
}
总结
通过 Apifox 的脚本功能实现 Token 自动管理,可以显著提高接口测试的效率和可靠性。本文介绍了从基础配置到进阶应用的全流程,希望能帮助开发者更好地利用 Apifox 进行自动化测试。
实际应用中,还需要根据具体的 API 规范调整脚本逻辑,特别是 Token 的获取和刷新机制可能因系统而异。建议先在小范围内测试验证,确认无误后再应用到整个测试流程中。
Apifox 的灵活性让我们可以轻松应对各种复杂的认证场景,是接口测试和开发的强大工具。
