在使用 Apifox 编排自动化测试流程时,我们会接触到各种类型的测试步骤:接口请求、数据库查询、For 循环、ForEach 遍历、脚本处理等等。这些测试步骤执行后产生的数据往往需要被下游步骤引用,作为下游步骤的输入条件,形成一个数据驱动 + 流程联动的自动化逻辑。举个例子:你可能需要在前置步骤中获取用户 token,或查询数据库中的某条记录,然后将这些结果用于下一个测试步骤的调用。那么这些上游步骤产生的数据,该如何在下游步骤中正确引用?数据传递的两种机制#
在 Apifox 的自动化测试中,不同测试步骤之间的数据流转,通常有两种方式:1. 通过「动态值」引用(即用即取)#
通过“动态值”功能,在下游测试步骤中直接读取上游步骤的数据。2. 通过「变量」中转(先存后用)#
在上游步骤中通过“提取变量”将关键数据提取为变量,再供下游步骤使用。理解这两种传递方式,是掌握 Apifox 自动化测试的基础。本文将从“如何提取数据”与“如何使用数据”两个角度出发,逐一拆解不同类型步骤的数据处理方法,帮助你灵活构建联动性更强的测试流程。可以根据自己的实际需求,跳转至感兴趣的部分进行阅读!1. 接口响应数据的提取与使用#
1.1 接口数据的特征#
在自动化测试中,接口请求执行后通常会返回结构化的 JSON 数据,这些响应数据是后续步骤的关键输入源,例如:相比其他类型的步骤,接口数据的结构往往比较复杂,可能包含多层嵌套的对象和数组。1.2 数据提取方式#
针对接口响应数据,我们通常采用两种方式来提取所需的数据,让其在测试步骤之间流转:方式一:动态值引用#
你可以在下游步骤中,通过动态值语法直接引用前置接口的响应。在任意输入框中点击魔棒图标,选择读取前置步骤的运行结果,Apifox 会自动生成表达式,无需手动拼写。方式二:提取为变量#
你也可以在接口步骤中通过提取变量功能,将响应中的特定字段提取为变量。例如设置变量名称为products_id,JSONPath 为 $.products[0].id,那么在后续步骤中就可以直接使用 {{products_id}}来引用这个值。1.3 数据使用场景#
接口响应数据通过上述动态值以及提取变量的方式来流转,在下游步骤中的常见用法如下:在接口请求中使用#
动态值方式:跟上述“方式一”介绍的一样,只需在输入框中点击魔棒图标,选择读取前置步骤的运行结果来填写输入参数即可。
提取变量方式:假设提取的变量为products_id,则在参数中直接填入{{products_id}}即可
在数据库操作中使用#
如果你需要将接口返回的某个值作为查询条件,传入数据库步骤中拼接 SQL 语句,也可以通过两种方式。提取变量方式:假设提取的变量名为products_id,则在 SQL 语句中直接插入{{products_id}}即可
在 For 循环中使用#
若需根据接口返回数组的长度执行多轮循环,可以通过动态值读取数组的 .length 值作为循环次数,例如{{$.1.response.body.products.length}}:在 ForEach 中使用#
若需将接口返回的数组对象,作为 ForEach 循环的输入源,也可以通过两种方式。动态值方式:直接把整个数组提取出来即可,例如{{$.1.response.body.products}}
提取变量方式:假设已提取整个数组为products变量,则在循环中直接插入{{products}}即可
在脚本中使用#
在脚本中引用前置步骤的数据,需要通过 pm.variables.get() 方法。提取变量方式:假设已将products提取为变量(环境/临时/全局变量) ,则在pm.variables.get()方法内填入products即可。
在脚本中不能直接使用{{products}}这样的插值语法,必须通过方法获取变量值。
2. 数据库查询结果的提取与使用#
2.1 数据库数据的特征#
数据库查询步骤执行后会返回查询结果的结构化数据,格式是一个数组对象,即使只查询到一条记录也会被包装在数组中,例如:与接口数据不同的是,数据库步骤产生的数据不能直接通过「动态值」访问,必须先通过「提取变量」的方式保存下来。2.2 数据提取方式#
在数据库步骤中执行完 SQL 后,Apifox 会自动解析出结构化响应,格式大致如下:[
{
"id": "1000",
"title": "标题1",
"description": "标题1的描述"
}
]
你可以通过 JSONPath 提取其中的字段并保存为变量,例如:JSONPath:$[0].id,如果要保存整个结果集,则设置为$
下游步骤通过{{ }}引用变量,例如:{{products_id}}
2.3 数据使用场景#
在接口请求中使用#
如果你在数据库中查询出了某个 id,将其提取为products_id的变量后,下游接口的请求参数中可以直接通过{{products_id}}引入该变量:在 ForEach 中使用#
如果你查询出了一组记录,想要逐条处理,就可以将整个数组作为 ForEach 循环的遍历源,例如{{products}}:前提是你在数据库操作中提取变量时保存了整个数组,例如: