Apifox的配置管理是一个分层、多类型的系统。
一、变量和环境
1. 变量类型和优先级
变量系统遵循明确的覆盖规则(优先级从高到低):
临时变量:单次接口运行或测试场景中有效,不持久化。在测试流程中暂存中间数据,供后续步骤使用。pm.variables.set/get("key")
测试数据变量:仅在数据驱动测试过程中有效。从CSV等文件读取数据,用于参数化测试。pm.iterationData.get("key")
环境变量:最常用。绑定到特定环境,随环境切换而改变。不同环境下的域名、鉴权信息、业务参数等。pm.environment.set/get("key")
全局变量:跨所有环境生效,不随环境切换而改变。全项目共享的、固定不变的常量。pm.globals.set/get("key")
模块变量:模块(项目子集)内生效。在大型项目中,管理某个独立模块的共享配置。
规则:当同名变量存在时,高优先级变量会覆盖低优先级变量。如,如果一个请求同时存在同名的环境变量和全局变量,则会使用环境变量的值。
2. 环境和服务
环境:代表项目所处的不同阶段(如开发、测试、生产)。每个环境可独立配置前置URL、环境变量和额外参数。
服务:仅在同一环境内,多个接口使用不同前置URL时才需要配置。例如,在“测试环境”下,可以配置“用户服务”、“订单服务”等多个服务。
二、变量操作全流程
1. 设置变量的四种专业方式
根据数据来源和场景,灵活选择设置方式:
方式一:手动预设(基础)
在环境管理界面中直接为环境或全局变量添加键值对。这里需区分 “远程值”(同步至云端,团队共享)和 “本地值”(仅存本地,适合存放密码、Token等敏感信息)。
方式二:从响应中提取(最常用)
这是实现接口间数据传递。在接口的 后置操作 中添加提取变量功能,使用JSONPath、正则表达式等方式从响应体中提取数据,并存储为任意类型的变量。甚至可以直接在响应面板悬浮于字段上,点击图标快速提取。
方式三:通过脚本动态设置(最灵活)
在前/后置脚本中使用 pm.environment.set() 等API进行高级操作。注意:若要存储对象或数组等非字符串类型,需先用 JSON.stringify() 转换,读取时再用 JSON.parse() 解析。
方式四:从数据库查询结果设置
在后置操作的数据库操作功能中,执行SQL查询,并将结果提取到变量中。
2. 使用变量的规范
引用语法:在任何支持的地方(URL、参数、Header、Body),均使用 {{变量名}} 格式引用。
读取对象属性:若变量值是对象或数组,可使用 {{变量名.属性名}} 或 {{变量名[索引]}} 的JSONPath语法读取嵌套值。
在脚本中读取:在脚本中不能直接使用 {{}} 语法,必须使用 pm.variables.get("变量名") 或 pm.environment.get("变量名") 等对应的API方法。
三、高级配置
使用“全局参数”统一管理通用参数
对于需要在所有(或大量)接口中自动携带的参数(如统一的认证Header),应在环境管理中配置全局参数。
利用“动态变量”生成随机测试数据
在参数值输入框点击魔法棒图标,可使用动态变量生成随机姓名、邮箱、时间戳等,避免测试数据冲突。
使用“公共脚本”实现逻辑复用
将通用的签名计算、Token刷新等函数写在 项目设置 -> 公共脚本 中,即可在多个接口的前后置脚本中引用,避免重复代码。注意,要使函数能被其他脚本调用,需将其声明为全局函数。
注意事项
敏感信息保护:密码、密钥等务必设置为 本地值,并定期备份环境。
JSON Body中的引用:在JSON Body中引用变量时,字符串类型的值需加双引号("{{stringVar}}"),非字符串类型则不加({{numberVar}})。
CLI运行差异:CLI运行时默认使用变量的 远程值,和客户端使用 本地值 的行为可能不同,需注意同步。
四、工作流示例,自动化登录和数据查询
假设需要测试一个需要登录后查询数据的流程:
配置环境:创建“测试环境”,设置前置URL https://api-test.zmtests.com。
登录并提取Token:在登录接口的后置操作中,添加“提取变量”,使用JSONPath(如 $.data.access_token)将Token提取到名为auth_token的环境变量中。
自动化鉴权:在“测试环境”的全局参数中,添加一个Header参数 Authorization,值为 Bearer {{auth_token}}。此后,该环境下所有接口请求都会自动携带此Token。
参数化查询:在数据查询接口中,将查询条件参数(如 {{user_id}})和测试数据变量或环境变量关联,实现数据驱动测试。