Apifox的环境和全局变量功能是为了实现高效API管理和自动化测试。
变量类型和应用场景
在Apifox中,变量主要分为以下几种类型,有不同的应用场景和优先级。
团队全局变量:跨团队所有项目共享。普通成员通常只能修改其本地值,团队管理员可管理远程值。微服务架构下,跨多个项目的通用配置,如企业级通用密钥。
项目全局变量:限定在当前项目内共享。项目内共享数据,如登录接口获取的Token供项目内其他接口使用。
模块变量:作用范围限定在特定模块内。管理特定功能模块(如用户管理、订单管理)的专用配置。
环境变量:跟随当前激活的环境切换而变化。不同环境(开发、测试、生产)的服务器地址、数据库配置等。
测试数据变量:专用于数据驱动测试,从CSV/JSON文件读取。需要大量不同数据测试同一接口的场景。
临时变量:优先级最高,仅在单次运行期间有效。临时覆盖其他变量值,用于单次调试。
变量优先级遵循:临时变量 > 测试数据变量 > 环境变量 > 模块变量 > 项目全局变量 > 团队全局变量。当出现同名变量时,Apifox会按照此顺序决定最终生效的值。
变量的设置和管理
掌握多种设置变量的方法,能让你更灵活地应对不同场景。
在环境管理中直接设置
这是最直接的方法,适合设置相对固定的配置信息。
路径:点击界面右上角的“环境管理”按钮,进入“全局变量”或特定环境进行设置。
操作:你可以添加变量名,并分别设置其远程值(团队共享)和本地值(仅个人使用)。
通过后置操作提取变量
当变量的值来源于接口响应时,这个功能非常有用。
路径:在接口的“后置操作”中,添加“提取变量”功能。
操作:选择提取来源(如响应的JSON数据),使用JSONPath语法(例如$.data.token)指定要提取的字段,并选择将其保存为环境变量或全局变量。
在脚本中动态设置
对于需要复杂逻辑处理的场景,可以通过脚本设置变量。
javascript
// 设置环境变量
pm.environment.set('variable_key', 'variable_value');
// 设置项目全局变量
pm.globals.set('variable_key', 'variable_value');
// 设置临时变量
pm.variables.set('variable_key', 'variable_value');
// 设置团队全局变量(需先定义)
pm.globals.set('variable_key', 'variable_value', 'TEAM');
提示:通过脚本只能设置变量的本地值。若要存储对象或数组,需先用JSON.stringify()转换,读取时用JSON.parse()解析。
从数据库获取数据并设置为变量
Apifox支持直接从数据库查询数据并设置为变量。
路径:在“后置操作”中添加“数据库操作”。
操作:配置数据库连接并输入SQL查询语句,查询结果可以通过JSONPath提取到变量中。
变量的使用
正确使用变量能极大提升效率,以下是一些技巧。
基本引用语法:在所有需要的地方(URL、参数、请求头、请求体),通过{{变量名}}的格式引用变量。
json
{
"field1": "{{stringVariable}}",
"field2": {{intVariable}},
"field3": {{arrayVariable}}
}
注意:在JSON请求体中,字符串类型的变量值需要加双引号,数值、数组、对象类型则不需要。
读取变量的子元素值:如果变量值是对象或数组,可以使用JSONPath语法读取其子属性。
例如,变量user的值为{"id": 1, "name": "jack"},可以用{{user.name}}来引用name属性。
若user是数组,如[{"id": 1, "name": "jack"}],则可以用{{user[0].name}}引用。
在脚本中使用变量:在“自定义脚本”中,需通过pm.variables.get("variable_key")等API获取变量值,不能直接使用{{}}语法。
环境管理和配置
环境管理是Apifox的主要功能之一,让你能轻松在不同工作阶段切换。
环境配置:你可以在“环境管理”中创建不同的环境(如开发、测试、生产),并为每个环境配置前置URL、环境变量和额外参数。
切换环境:通过界面右上角的环境下拉菜单,可以快速切换当前激活的环境,所有接口的请求将自动使用新环境的配置。
服务(前置URL):当一个环境下存在多个不同基地址的服务时(如用户服务、交易服务),可以配置多个“服务”,并在接口或目录级别指定使用的服务。
远程值和本地值
Apifox为全局、模块和环境变量设计了“远程值”和“本地值”的双重属性,这平衡了团队协作和个人隐私的需求。
远程值:存储在Apifox服务器,和团队成员同步共享,适合存储团队共用的配置。
本地值:仅保存在你的本地设备,不会同步到服务器,适合存储个人令牌、密码等敏感信息。
使用优先级:当存在本地值时,Apifox会优先使用本地值;只有在本地值为空时,才会使用远程值。
注意:本地值存储在本地,清理缓存或更换设备时可能丢失。使用Apifox CLI运行时,使用的是变量的远程值,这可能造成和客户端(使用本地值)运行结果的差异。
实践和常见问题
如何选择变量类型:
需要在不同环境有不同值的配置(如服务器地址),使用环境变量。
项目内共享且不随环境变化的常量,使用项目全局变量。
跨项目共享的配置,由管理员设置团队全局变量。
临时测试或覆盖值,使用临时变量。
实现接口间参数传递:这是一个常见需求。例如,将登录接口返回的token传递给后续接口。
在登录接口的后置操作中,使用“提取变量”或“脚本”将响应中的token存入变量(如auth_token)。
在后续接口的请求参数或请求头中,通过{{auth_token}}引用该变量。
关于BASE_URL:Apifox内置了一个名为BASE_URL的特殊环境变量,其值为当前环境的前置URL。但请注意,在脚本中建议使用pm.request.getBaseUrl()来获取前置URL,因为如果接口使用了非默认服务,BASE_URL可能不准确。