在 Apifox 中,变量可以让你方便地保存和复用各种值。将某个值设置为变量后,可以在不同的环境、接口、脚本以及测试场景中灵活使用。借助变量,不仅能提升工作效率,还能促进团队协作。什么是变量#
变量是数据的符号化表示,让你在需要某个值时无需重复手动输入。这种方式非常适合在多个地方重复使用相同的值。例如,如果多个接口使用同一个 token,而该 token 可能会变化,你可以将其存储为一个名为 {{my_token}}
的变量。在接口参数中,直接引用 {{my_token}}
即可。当 token 发生变化时,只需更新变量值,所有引用该变量的地方都会自动同步更新。这一概念适用于接口中的任何重复数据。在发送请求时,所有引用变量的地方都会被替换为其存储的值。变量可用于参数值、请求体、URL 或请求头中,灵活地满足不同需求。变量类型#
Apifox 支持多种类型的变量,帮助你根据开发、测试和协作需求灵活调整流程。每种变量类型都对应接口请求的不同上下文,并具有特定的用途。这些变量类型依次为:全局变量、环境变量、测试数据变量和临时变量。全局变量#
全局变量 允许在项目内的所有接口、脚本和环境之间共享数据,它们在整个项目乃至团队中都可以访问,可以在环境管理页中的左上方进行设置。有两种类型的全局变量,对应不同的使用范围:可以在整个项目内进行共享与使用 。适用于项目内的接口间的变量流转需求,例如登录接口提取 token 到项目全局变量中,再给后续业务接口作为鉴权使用。 可以在整个团队内进行共享与使用,可以在团队内的项目间流转变量数据。适用于项目与项目之间的变量流转需求,例如登录接口属于登录项目中,财务接口属于财务项目中,通过使用团队全局变量来让登录项目中获取的 token 给财务项目中的接口作为鉴权使用 (常见的微服务场景)。 💡
1.
在项目的环境管理页面中,仅能查看已有的团队全局变量,以及修改这些已有变量的本地值,不可以添加、删除团队全局变量和修改现有变量的变量名与远程值。
2.
在运行接口时,通过使用前后置操作提取、设置变量到团队全局变量,仅能修改已有变量的本地值,不可以添加、删除团队全局变量和修改现有变量的变量名与远程值。 环境变量#
环境变量 使你能够根据特定环境 (如本地开发、测试或生产环境) 调整工作配置。切换环境时,当前环境的环境变量值将生效。每次只能激活一个环境。测试数据变量#
测试数据变量 来自外部的 CSV 或 JSON 文件,用于在测试场景或 Apifox CLI 中定义数据集。其值是临时的,接口或集合运行结束后将不再保留。临时变量#
临时变量 仅在单个接口或测试场景的运行期间有效,运行结束后会消失。它适用于临时覆盖其他类型的变量,并且不会在执行后保留值。变量优先级#
当不同类型的变量具有相同名称时,变量的生效优先级为:团队全局变量 < 项目全局变量 < 环境变量 < 测试数据变量 < 临时变量
。例如,如果定义了一个名为 id
的全局变量和一个同名的临时变量,执行接口时将使用临时变量的值。Apifox 中的变量以字符串形式存储。当存储对象或数组时,需要使用 JSON.stringify()
转换为字符串,读取时则使用 JSON.parse()
进行解析。
远程值和本地值#
远程值 是在变量的参数(环境或全局)中设置的值。该值会与 Apifox 的服务器同步,并在你分享该参数时与团队成员共享。设置远程值有助于团队协作,但需要注意,远程值中的数据可能会被团队内的其他人访问,因此可能公开。
本地值 是在发送接口请求时使用的值。它不会与 Apifox 服务器同步,也不会保存在共享的 API 文档、环境或全局变量中。 本地值仅保存在本地,适合存储密码、token 等敏感数据。这些数据不会与其他团队成员同步,每个人可以安全地独立使用自己的本地值。如果不需要使用个人的本地值,可以将其留空,这样本地值会与远程值保持一致。然而,一旦在本地值字段中输入了值,变量将不再使用远程值。你还可以点击本地值旁边的链接图标 🔗
,将当前值重新绑定到远程值。由于 本地值
仅存储在本地,使用清理软件清除 Apifox 文件缓存时,可能会导致 本地值
被删除,请谨慎操作。
更换设备时,本地值
不会随账号自动迁移。你可以通过导出和导入环境功能来迁移本地值。
如果使用 Apifox Web 版,本地值
存储在浏览器的数据中。
在 Apifox CLI 中使用变量#
在 Apifox 客户端设置好自动化测试的测试场景后,你可以在任何机器上使用 Apifox CLI 运行该场景。需要注意的是,在客户端运行时使用的是变量的 本地值
,而在 CLI 中运行时使用的是变量的 远程值
。如果客户端和 CLI 的运行结果不同或出现错误,通常是由于这一差异导致的。定义变量#
定义变量的方法有多种,具体取决于变量值的来源。你可以在右上角的 “环境管理” 弹窗中预设变量值,也可以通过前置/后置操作中的 “提取变量” 或 “执行数据库操作” 来设置变量值,此外,还可以通过 “自定义脚本” 设置变量。在环境管理中预设变量值#
你可以在 “环境管理” 弹窗中预设全局变量和环境变量的值,步骤如下:变量的远程值只能在 “环境管理” 中设置。使用脚本时,只能设置变量的本地值而不能设置远程值。
添加“ 提取变量”操作#
Apifox 支持可视化提取接口响应中的值并保存为变量。步骤如下:1
在运行标签页(文档模式)或请求标签页(调试模式)中,导航到后置操作
2
光标悬停在 “添加后置操作” 上并选择 “提取变量”
3
输入变量名并选择变量类型。选择提取来源,如响应 JSON、响应 XML 或响应文本等。
4
如果响应是 JSON/XML 格式,你可以使用
JSONPath/XPath 语法解析响应 JSON/XML 的特定部分,并将其保存为变量值。
5
发送请求后,变量提取会被执行,你可以在控制台查看日志。
在脚本中设置变量#
你可以在前置/后置请求脚本中以编程方式设置变量。需要通过 set
方法设置变量。以下是示例代码:环境变量支持数组、对象、字符串等形式存储,你可以参考以下代码将对象或数组 (非字符串) 写入环境变量。读取的时候,需要使用 JSON.parse
逆转换。从数据库获取变量值#
Apifox 提供了一个特殊功能:连接数据库获取数据,将其设置为变量,并在接口中使用。步骤如下:1
在运行标签页 (文档模式)或请求标签页(调试模式)中,导航到后置操作。
2
悬停在 “添加后置操作” 上并选择 “数据库操作”。
4
输入 SQL 命令。命令中支持使用变量,如 {{variables}}
。
5
设置 “提取结果到变量”,支持使用 JSONPath,开启 “控制台打印结果” 开关。
6
点击发送请求,你可以在控制台查看数据库操作的结果。
使用变量#
在 Apifox 中,你可以通过双大括号引用项目中的变量。例如,要在接口的认证设置中引用名为 my_token
的变量,只需将变量名用双大括号包裹,如:{{my_token}}
。当你运行接口时,Apifox 会解析该变量并用其当前值进行替换。运行请求时,Apifox 会使用 CurrentStatus
变量的存储值。如果 CurrentStatus
的值是 "available",发送的请求 URL 会包含查询参数:{
"status" : "{{CurrentStatus}}"
"quantity" : {{TotalPet}}
}
在 JSON 格式中使用字符串类型的变量时,需要加上双引号。对于其他类型的变量,则无需加双引号,如上例所示。
双大括号有时可能会触发 JSON 格式错误的警告,但这些警告可以忽略。
变量可以在请求 URL、参数、请求头、认证设置、请求体等地方使用。有时,你可能会看到 “未解析的变量” 提示,这表示该变量在环境或全局变量中未定义。但这并不一定是问题的根源。如果你是在后置操作中提取变量或使用脚本设置变量,可能在请求运行前还未获取到其值。如果是临时变量,它们在执行后会过期,这也可能导致变量值不可用。为了确认是否存在问题,你可以先发送请求进行验证。访问变量的子元素值#
如果变量的值是对象或数组形式,可以通过 {{变量名.属性名}}
或 {{变量名[0].属性名}}
读取变量中的字段值。例如:在接口参数中,可以用 {{user.name}}
引用 user 对象的 name 字段
在自定义脚本中,可以用 pm.variables.get("user.name")
引用 user 对象中的 name 字段
在接口参数中,可以用 {{user[0].name}}
引用 user 数组第一个元素的 name 字段
在自定义脚本中,可以用 pm.variables.get("user[0].name")
引用 user 数组第一个元素的 name 字段
使用 {{user.name}}
这样的方式读取变量(对象或数组)中的字段值遵循 JSONPath 语法规范。你可以用变量名替换 JSONPath 中的 $
符号。在脚本中使用变量#
在脚本中使用变量时,不能直接使用 {{变量}}
语法。需要先通过 get
方法将变量值赋给一个新的 变量。以下是示例代码:环境变量支持数组、对象、字符串等形式存储,你可以参考以下代码将对象或数组 (非字符串) 写入环境变量。读取的时候,需要使用 JSON.parse
逆转换。打印变量值#
在发送请求时,你可以把变量值打印到 Apifox 控制台。使用测试数据变量#
在 Apifox 中,如果需要发送多组数据作为请求参数,可以使用 “测试数据变量” 功能。在自动化测试场景中,你可以导入 CSV 或 JSON 格式的数据,并通过 {{变量名}}
引用这些数据变量,其中变量名对应 CSV 中的列名。选择测试场景中的数据集后,运行时 {{变量}}
会被替换为实际数据。每行数据对应一次请求执行,测试报告中将显示每次运行的请求和响应。常见问题#
我可以在 Mock 中引用变量吗?在哪些场景可以使用变量?变量只有在发送请求时才会被转换为实际值。因此,变量可以在某些场景中使用,但在其他场景中则无法使用。接口:可以直接在接口的请求参数、请求体、路径和 Auth 等地方使用 {{变量}}
。
前置和后置脚本:在这些脚本中,使用 pm.environment.get("变量名")
或类似语句引用变量,但不能直接使用 {{变量}}
。
测试场景:由于测试场景中的请求会被发送,因此使用方式与接口和脚本相同,可以在请求中使用 {{变量}}
。
接口文档:请求的默认值、响应的默认值以及 Mock 数据中都不能使用变量。
Mock:高级 Mock 和 Mock 脚本不支持使用变量。
不要将一个变量的值设置为另一个变量,这可能导致变量值无法正确解析。关键点在于,变量只有在实际发送请求时才会被解析。因此,变量不能用于接口文档的静态部分或 Mock 场景,因为这些场景并不涉及请求的发送。