在Apifox中做接口自动化测试时,必须通过数据库查询验证数据真实落库,配置MySQL连接后,在前置操作中执行SQL存入变量,再于后置操作中用该变量与预期值断言比对。

在Apifox中做接口自动化测试时,需要确认接口写入或修改的数据是否真实落库,这时必须让断言能读取数据库实际值并与预期比对——不能只校验响应体,否则无法发现SQL未生效、事务回滚、字段映射错误等深层问题。
配置MySQL数据库连接
进入当前项目 → 【设置】→【数据库连接】→【新建连接】。
填写数据库地址(如 【192.168.1.100:3306】)、数据库名、用户名、密码;点击【测试连接】,成功后保存。
注意:数据库账号必须有对应库的 SELECT 权限,否则后续查询会静默失败且无报错提示。
前置操作中执行SQL并存入变量
打开待测接口 → 切换到【前置操作】→【添加脚本】。
输入以下代码(以查询用户最新手机号为例):
```js
const sql = `SELECT phone FROM user WHERE id = {{user_id}} ORDER BY updated_at DESC LIMIT 1`;
const result = await pm.database.query('mysql-生产环境', sql);
pm.variables.set('db_phone', result[0]?.phone || '');
```
其中 【mysql-生产环境】 必须与你在【数据库连接】中设置的连接名称完全一致,大小写敏感,拼错将导致 query 返回 undefined。
这一步执行后,变量 db_phone 就拿到了数据库里真实的手机号,供后续断言使用。
后置操作中用数据库值做断言
切换到【后置操作】→【添加脚本】。
Apifox Linux 桌面版是一款专为 Linux 开发者打造的 API 一体化工具,集接口设计、调试、测试、Mock 和文档管理于一体。它在 Linux 环境下提供稳定、高效的本地运行体验,帮助开发者实现 API 全生命周期管理,是 Linux 开发者进行接口开发与联调的高效工具。
方法一:直接比对
```js
const expectPhone = pm.environment.get('expect_phone');
const actualPhone = pm.variables.get('db_phone');
pm.test("数据库手机号与预期一致", function () {
pm.expect(actualPhone).to.equal(expectPhone);
});
```
方法二:带容错的断言(推荐用于时间戳、JSON字符串等易格式差异场景)
```js
try {
pm.test("数据库手机号匹配", function () {
pm.expect(pm.variables.get('db_phone')).to.equal(pm.environment.get('expect_phone'));
});
} catch (e) {
console.warn("断言失败但继续执行:", e.message);
}
```
方法三:多字段批量校验
第一步:前置操作中一次性查出多个字段:const row = await pm.database.query('mysql-生产环境', `SELECT name, age, status FROM user WHERE id = {{user_id}}`);<br>pm.variables.set('db_user', row[0] || {});
第二步:后置操作中展开断言:const u = pm.variables.get('db_user');<br>pm.test("姓名正确", () => pm.expect(u.name).to.equal(pm.environment.get('name')));<br>pm.test("年龄正确", () => pm.expect(u.age).to.equal(pm.environment.get('age')));<br>pm.test("状态激活", () => pm.expect(u.status).to.equal(1));
验证断言是否生效
点击【发送】运行接口 → 查看下方【结果】面板 → 展开【断言】区域。
绿色对勾表示通过,红色叉号表示失败;点击失败项可查看具体 error message 和 actual/expected 值。
若断言区域为空,说明脚本未执行——检查是否误把脚本放在【前置操作】标签页却没启用,或数据库连接名称拼写错误导致 query 被跳过。

















