Apifox 中操作数据库的常见场景

Apifox 是一款功能强大的接口管理平台,不仅提供了接口请求和响应管理的功能,还集成了数据库操作,为用户提供了更加灵活和便捷的接口测试和数据管理方式。Apifox 中数据库的查询结果可在接口请求参数、断言、自定义脚本等场景中使用,目前支持 MySQL
、SQL Server
、Oracle
、PostgreSQL
四种数据库类型。下面将介绍在 Apifox 中常见的数据库操作场景,并结合实际的操作过程来展示其应用。
概览
大体上来说,在 Apifox 中操作数据库的常见场景主要有以下几个部分,相关的实践操作请看下文:
1、前置操作添加 SQL
- 获取数据库数据并提取结果,将结果用于其它接口(比如做为请求参数值)。
2、后置操作添加 SQL
- 调用接口发生增删改等操作时,通过后置脚本的 SQL 语句查询数据库内容,用于观察接口的操作是否生效。
- 做为接口断言,校验数据库的数据是否符合期望。
- 做为接口用例,先通过接口往数据库增加一条数据,再用 SQL 查询是否增加成功,最后用 SQL 删除该数据,以保证数据不受污染(该操作配置可以保存为接口的一个用例,表明该接口能够正常使用,并且发生请求操作后不会污染数据库数据)。
数据库服务搭建与连接
实践案例通过 MySQL 来操作,使用其它数据库也不影响,因为操作思路是一样,详情如下:
1、假设有一个 student 表,其表结构如下图所示,其中字段 mail
的值为唯一值:

2、当然,除了数据表的建立,还需要写几条接口,用于数据库基本的增删改查,比如下面用 node.js 写的服务:

3、服务启动后,即可在 Apifox 建立连接,点击 “项目设置”->“数据库连接”->“新建” ,然后填写数据库相关的用户名、密码等信息,保存即可。你可以将连接信息配置在 “测试环境” 或者其它环境里,当你在项目里切换环境的时候(比如换成开发环境),其数据库连接也会跟随改变(变成开发环境里配置的数据库连接信息),这样省去了手动修改环境变量中前置 URL
的麻烦。

上面的操作都完成之后,即可发起请求,验证常用场景。
前置操作添加 SQL
通过 “前置操作” 获取数据库数据并提取结果,提取的结果可存储到 “环境变量” 或者其它变量中。如下图所示:
1、选择 “前置操作”->“添加前置操作”->“数据库操作” ,填写 “操作名称” ,选择 “数据库连接” 并填写 “SQL 命令” ,将 SQL 查询到的结果通过编写 JSONPath 表达式将其提取到环境变量中(比如将数组中第一个对象的 id 值提取到环境变量)。相关信息配置完毕,即可发送请求,在 “控制台” 即可看到 SQL 查询出来的结果。

2、JSONPath 表达式提取到环境变量的结果如下图所示,提取到的结果可作为参数值提供给其它 API:

后置操作添加 SQL
校验操作是否生效
调用接口发生增删改(POST/DELETE/PUT)等操作时,通过后置操作的 SQL 命令查询数据库内容,用于观察数据库的数据是否发生改变。比如下面的“增加(POST)” 操作:
1、选择 “后置操作”->“添加后置操作”->“数据库操作” ,填写 “操作名称” ,选择 “数据库连接” 并填写 “SQL 命令” ,将 “打印到控制台” 开关开启,如下图所示:

2、然后填写请求信息,增加一条数据到数据库,最后点击 “发送” ,即可看到响应结果:

3、在控制台可看到通过 SQL 命令查出来的新增数据,说明新增的信息已写入数据库:

断言
通过断言,可以校验数据库中返回的结果是否符合期望。比如要校验“数组中第一个对象成员的邮箱(mail)是否正确”,可以在后置操作中将结果提取到临时变量,然后通过断言临时变量的值,来校验结果的准确性,详情如下:
1、选择 “后置操作”->“添加后置操作”->“数据库操作” ,填写 “操作名称” ,选择 “数据库连接” 并填写 “SQL 命令” ,将 SQL 查询到的结果通过编写 JSONPath 表达式将其提取到 “临时变量” 中:

2、然后选择 “后置操作”->“添加后置操作”->“断言” ,断言对象选择 “临时变量” ,填写 “变量名” ,填写“断言值” (即断言第1步操作中的临时变量的值是什么),详情下图所示:

3、当 “断言” 操作设置完毕,即可 “发送” 请求,获取断言结果:

接口用例
先通过接口往数据库增加一条数据,再用 SQL 查询是否增加成功,最后用 SQL 删除该数据,以保证数据库数据不受污染(只想验证接口能否使用,但又不想这个数据污染数据库),该操作配置可以保存为一个接口用例,详情如下:
1、通过接口来向数据库里新增数据。首先填写相关的请求信息,然后配置 “后置操作” :

2、在 “后置操作” 里添加 SQL 查询语句,用来校验 API 的操作是否生效:

3、在 “后置操作” 里添加 SQL 删除语句,用来将新增到数据库的数据删除,避免数据受到污染:

4、最后 “发送” 请求,即可看到相关的结果:

总结
在 Apifox 中,通过前置操作和后置操作的 SQL 语句,我们可以方便地对数据库进行操作和校验。这些操作包括提取数据、断言校验、接口用例以及数据库状态观察。通过 Apifox 的数据库操作功能,能够提高接口测试的效率和可靠性,以及更好地管理和验证数据的正确性。