前置操作和后置操作都是 API 请求在发送和响应过程中执行的脚本,主要用于在发起 API 请求前和获得响应后完成验证或执行某些操作,目的是为了提高 API 调试和测试的效率,并确保接口的正确性。
前置操作
前置操作是在 API 请求之前执行的脚本代码,可以用于做以下事情:
-
设置 API header(请求头)
它们可用于设置请求的请求头、请求正文、验证请求参数和配置身份验证等。
-
设置 API 参数
前置操作能够访问环境变量、全局变量和请求变量中的数据。前置操作也可以帮助请求者了解请求参数以及如何处理它们。
-
添加身份验证
例如基本身份验证或 OAuth。在发送 API 请求之前,前置操作可以被用来获取访问令牌或者其他权限,确保 API 请求发送的是有效的和合法的请求。
变量替换
“变量替换”功能通常用于在发送 API 请求前,作用是把接口请求参数里的所有的已引用变量(包括动态值)替换成真实的请求内容。通常用于处理接口签名等转换场景。此时主要涉及以下两种场景:
- 通过脚本 set 变量
该场景下的操作需要放在“变量替换”之前运行,否则通过该脚本 set 的变量就不会对当前接口的请求参数生效。
- 接口签名脚本
该场景下的脚本需放在“变量替换”之后,这样脚本才能获取到该接口实际请求的参数值,否则获取到的参数值是变量替换之前的模板数据。
如需了解更多,请参考《接口签名如何处理?》
后置操作
后置操作能够利用获取来自接口响应的数据,例如状态代码、header、body 等信息,进行二次处理:
-
验证 API 响应的状态码和响应时间是否符合预期。
-
验证 API 响应的内容,如 JSON 或 XML 数据。
-
从 API 响应中提取数据,并将其用于后续请求。
-
自动提取响应中需要的数据。
层级关系
前后置操作都可以在接口目录中设置父级操作。父级操作可以被继承到该目录下的所有接口中,适用于需要在多个接口中执行相同的前置操作的场景,例如鉴权,变量替换等。 接口本身可以灵活调整各操作的运行顺序。
子级接口可以选择是否采用父级操作。
当子级接口下又存在多个接口时,若选择关闭引用,次级接口将默认关闭该自定义脚本。
断言
“后置操作”支持添加断言,你可以对接口返回的数据或响应时间设置断言,以判断当前接口返回是否符合预期。
设置断言
打开 Apifox 中的某条接口,在“后置操作”页中设置断言。例如输入 $.data.status
。
提示
根对象使用 $
符号进行表示,而无需区分是对象还是数组。
查看结果
运行后即可查看断言结果:
提取变量
在一些具有明显上下游关系的接口中,有时需要将 A 接口的返回数据作为 B 接口的请求参数。
比如在创建宠物信息场景下,需要将 A 接口返回的 pet_id
中的数据作为后续接口的请求参数,然后在 B 接口中的「后置操作」中添加「提取变量」功能,基于 A 接口返回的结果自动提取数据并设置为变量(临时变量/环境变量/全局变量),方便其它接口运行的时候直接使用。
指定变量类型
打开 Apifox 中的某条接口,在“后置操作”页中添加“提取变量”,变量类型选择为“环境变量”。
接口间相互传递数据
例如当前 B 接口的请求参数依赖于 A 接口返回的数据,现希望 B 接口在发送请求的同时能自动获取 A 接口返回的数据并作为请求参数。实现思路如下:
- A 接口在后置操作中添加提取变量功能,将返回的数据自动提取至变量中。
- B 接口对应的参数值直接引用已提取的变量。
A 接口
打开 A 接口用例的”后置操作“页,在后置操作中添加提取变量功能。将接口返回 Response JSON 数据里的 token 值提取到名为 petid
的变量中。
B 接口
在 B 接口中的请求参数中直接填写 {{petid}}
,即可在请求中引用上一步骤中所创建的数值。
若不确定是否正确引用了 A 接口所生成的数据,可以在 B 接口的前置操作中添加以下自定义脚本:
var petid = pm.environment.get("petid");console.log(petid)
这样就可以在控制台中查看已引用的变量值。
新建 / 操作数据库
“前置/后置操作”支持添加数据库。在 Apifox 中选择并连接数据库后,就可以对该数据表进行增删查改和其他操作。支持在控制台中打印由数据库操作返回的结果,也可以将其提取为变量,以便在其它接口请求参数、断言、自定义脚本和读写其它数据库等多种场景中使用。
支持以下关系型数据库(SQL):
- MySQL
- SQL Server:支持 SQL Server 2014 及以上版本
- Oracle
- PostgreSQL
- ClickHouse
- 达梦数据库
支持以下非关系型数据库(NoSQL):
- MongoDB
- Redis
新建数据库
- 在“前置/后置操作“中选择“数据库操作”,然后点击新建数据库连接。不同的环境默认使用相同的数据库连接配置,同时也支持为每个环境分别进行独立的配置。
- 点击“数据库连接”下拉框中的“数据库连接管理”选项,然后点击右上角的新建按钮。
- 选择数据库类型,然后填写数据库的连接信息。
提示
Apifox 重视您的数据安全。数据库地址、端口、用户名、 密码、数据库名仅存储在客户端本地,不会同步到云端。即便是同一团队内,成员之间也不会相互同步数据库的连接信息,每个团队成员需要自己手动设置数据库。
操作数据库
非关系型数据库
关于非关系型数据库(MongoDB)的操作方法,请参考此文档。
关系型数据库
如果你连接的是关系型数据库,那么可以直接在命令框中输入 SQL 命令直接进行操作。例如输入 SELECT * FROM user LIMIT 2
命令,然后勾选“控制台打印结果”按钮,底部的控制台会出现对应的结果。
将结果提取为变量
支持使用 JSONPath 表达式提取数据库操作返回的结果。以上图为例,$[0].name
表示取到返回数据数组中的第一个元素的 name
字段值 Apifox
,然后将其提取为临时变量,变量名 name1
。
关于更多提取变量的方法,你可以阅读《JSON Path 文档》。
关于如何使用已提取的变量,你可以阅读《环境变量 / 全局变量 / 临时变量》。