环境变量 / 全局变量 / 临时变量
和编程语言类似,变量是允许在多个环境中重复使用的值。不同的接口用例(请求参数、脚本等)与环境可以重复引用相同的变量。开发者只需要更改一次变量值,就能同步修改所有引用了该变量的相关值,大幅提升工作效率。
变量类型
Apifox 中的变量存在三种变量类型:
环境变量
全局变量
临时变量
环境变量
环境变量是最常用的变量类型。同一个变量可以在不同的环境设置不同的值,变量值会跟随环境切换而改变。
全局变量
全局变量中的数值不会随着环境切换而改变,在环境管理页中的左上方进行设置。
临时变量
临时变量仅在单次运行接口用例
或测试管理里的测试用例
或测试套件
过程中有效,不会持久保存至系统。
添加变量
你可以在“管理环境”页中添加环境变量或全局变量。详细说明请阅读《环境管理》。
使用变量
所有类型的变量都是通过双大括号的方式,如{{token}}
。变量一经定义,在接口运行 tab
、接口用例
、快捷调试
、集合测试
的所有参数值
、前置/后置脚本
等各功能页中都可以使用该变量。
环境中的额外参数
也同样可以使用变量。
Body
请求 Body 为 json 或者 raw 格式的,也可以直接使用变量、动态变量,使用方式如下:
{
"field1": "{{stringVariable}}",
"field2": {{intVariable}},
"field3": {{arrayVariable}},
"field4": {{objectVariable}},
"field5": {{$timestamp}}
}
注意:
- json 格式里 string 类型的值,使用变量的时候需要加上
双引用
;其他类型的值不要加双引号
,如上面例子所示。 - 如果以
没有加双引号
的方式使用了变量,请不要使用格式化
功能,如有提示 JSON 格式不正确,直接忽略即可。
其他格式
若变量的值为对象
或数组
形式,可以通过{{variableName.attributeName}}
或{{variableName[0].attributeName}}
方式读取变量里的属性值,示例:
变量
user
的值为如下格式对象
:{
"id": 1,
"name": "jack"
}- 接口参数中以
{{user.name}}
方式引用user
对象里的name
属性值。 - 自定义代码中以
pm.variables.get("user.name")
方式引用user
对象里的name
属性值。
- 接口参数中以
变量
user
的值为如下格式数组
:[
{
"id": 1,
"name": "jack"
}
]- 接口参数中以
{{user[0].name}}
方式引用user
数组里第一个对象里的name
属性值。 - 自定义代码中以
pm.variables.get("user[0].name")
方式引用user
数组里第一个对象里的name
属性值。
- 接口参数中以
如上所示,读取变量(对象或数组)里的属性值写法{{user.name}}
遵循JSON Path
语法规范,只需将JSON Path
里的$
符号替换为变量名
既可。如需了解更多JSON Path
语法规范,请查看文档。
变量优先级
所有变量都是通过双大括号{{}}
的方式引用,当不同类型变量
存在相同名称的变量
时,系统会根据优先级决定使用哪个类型的变量。
变量优先级:临时变量 > 测试数据变量 > 环境变量 > 全局变量。
例如存在一个 A 接口,已在接口文档中定义了环境变量 currencies
,值为 HKD。如果在请求历史中将 currencies
的值改为 CNY(临时变量),请求历史将优先使用临时变量向接口发送请求。
本地值和远程值
环境变量存在本地值和远程值的差异。所有使用到变量的地方,实际运行的时候优先读写“本地值”,而不会读写“远程值”。“本地值” 仅存放在本地,不会同步到云端,团队成员之间也不会相互同步,适合存放 token、账号密码等敏感数据。
在远程值
中填写的数据将保存至远端服务器中,主要用于团队间共享数据值。
由于本地值
仅存放在本地,使用一些清理软件清理 Apifox 文件缓存会导致本地值
被清空,请务必注意。
通过脚本调用变量
本章节将介绍如何在运行自动化脚本时使用变量。
环境变量
// 设置环境变量
pm.environment.set('variable_key', 'variable_value');
// 获取环境变量
var variable_key = pm.environment.get('variable_key');
// unset 环境变量
pm.environment.unset('variable_key');
环境变量支持数组、对象、字符串等形式存储,你可以参考以下代码将对象或数组(非字符串)写入环境变量。
var array = [1, 2, 3, 4];
pm.environment.set('array', JSON.stringify(array));
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
pm.environment.set('obj', JSON.stringify(obj));
读取的时候,需要使用 JSON.parse
逆转换。
try {
var array = JSON.parse(pm.environment.get('array'));
var obj = JSON.parse(pm.environment.get('obj'));
} catch (e) {
// 处理异常
}
全局变量
// 设置全局变量
pm.globals.set('variable_key', 'variable_value');
// 获取全局变量
var variable_key = pm.globals.get('variable_key');
// unset 全局变量
pm.globals.unset('variable_key');
临时变量
// 设置临时变量
pm.variables.set('variable_key', 'variable_value');
// 获取临时变量
var variable_key = pm.variables.get('variable_key');
// unset 临时变量
pm.variables.unset('variable_key');