简介
Jmeter 除了可以发起Http请求,还支持多种协议,可对数据库和中间件发起请求。通过和数据库的交互,Jmeter可以实现接口测试和性能测试的数据准备,数据校验。Jmeter支持多种类型的数据库,只要在引入数据驱动的时候加载不同的驱动包和数据库连接信息即可。本文以Mysql为例详细描述Jmeter如何处理数据库,包含以下知识点:
-
Jmeter如何配置数据库连接
-
Jmeter如何发起数据库请求, 包括只读请求和更新请求
-
Jmeter如何发起带变量的数据库请求
-
Jmeter如何存储数据库返回的结果,将其保存为变量供后续使用
Jmeter的核心数据库组件有:JDBC Connection Configuration(数据库连接配置)和JDBC Request(数据库请求)
JDBC Connection Configuration数据库连接配置
JDBC Connection Configuration是用于配置数据库连接信息的,主要有如下选项:
-
Variable Name Bound to Pool: 数据库连接名,JDBC Request通过此变量名定义要查询的数据库
-
Database Connection Configuration:
数据库连接信息(连接URL,Driver类,用户名,密码)
-
Connection Pool Configuration:
线程池配置,多线程运行时的性能配置,接口测试采用默认配置
-
Connection Validation by Pool:
连接池验证信息,采用默认值即可
发起JDBC Request以前需要指明对应的数据库连接配置,一个Jmeter脚本中可以有多个数据库连接配置
Jmeter支持不同类型的数据库,针对不同类型的数据库要引入不同的jar包(把jar包放到ext目录下),并在JDBC Connection Configuration中选择不同的 JDBC Driver class和数据库URL,具体格式参见下图
JDBC连接池配置完毕以后就可以通过JDBC Request发起数据库查询和更新操作。
JDBC Request 数据库请求
JDBC Request 表示数据库请求,功能类似于客户端的SQL QUERY功能,关键配置信息如下:
-
Variable Name Bound to Pool: 指定要操作的数据库信息,此处的名字为JDBC Connection Configuration中定义的名字
-
SQL Query: 查询类型,常用的有Select,Update和 Prepared Statement
-
Select Statement: Select语句
-
Update Statement: Insert/Update/Delete 语句
-
Callable Statement:回调语句
-
Prepared Statement:预编译语句
-
Commit:提交
-
Rollback:回滚
-
AutoCommit:自动回滚
-
Query:数据库语句,可一次编写多个数据库处理语句,此处需要和QueryType匹配
-
当编写的是Select语句时,QueryType需要选择Select Statement
-
当编写的是Update语句时,QueryType需要选择Update Statement
-
当编写的语句带变量时,QueryType需要选择Prepared Statement
当涉及事物时,需要选择相应的Commit,Rollback和AutoCommit选项
JDBC Request 参数化数据库请求
有时候操作数据库操时,查询或者更新的值是动态变化的,针对这种情况Jmeter提供了参数化的支持,可以将Jmeter的变量直接应用到数据库查询当中。在Jmeter中,参数化数据库请求非常简单,只需要把原有的固定值替换为变量即可(Jmeter中$符号表示变量)。Jmeter不仅可以直接引用脚本中已经生成的变量,还可以引用函数助手生成的变量,如下示例就是使用Jmeter函数助手通过RandomString生成随机变量作为数据库uname的插入值,通过这种方式实现了随机往数据库插入不同用户名的用户。
JDBC Request 定义数据库返回的结果变量
Jmeter通过在JDBC Request中指明Variable names,来存储数据库的返回结果。下图的示例就是查询出指定条件的用户,并且把查询出的前七列数据赋值给n1,n2,n3,n4,n5,n6,n7.
-
在JDBC Request的Variables names中指定变量名,即可将查询结果按顺序存储到对应的变量名当中,供后续使用。
-
Result variable name会存储一个汇总的变量结果。
此处需注意,以查询为例,返回的是一张2维表数据,n1...n7分别对应的是第1列到第7列,具体到某行某列还需通过debug sampler查看Jmeter生成的变量情况。Jmeter会自动根据行的情况扩展n1...n7,生成每个单元格数据对应的变量。
示例:如果查询出来的数据有2行3列,并且将Variables names定义为a,b,c,则实际生成的变量: A_#=2 (总行数)A_1=第1列, 第1行 A_2=第1列, 第2行 B_#=2 (总行数) B_1=第2列, 第1行 B_2=第2列, 第2行 C_#=2 (总行数) C_1=第3列, 第1行 C_2=第3列, 第2行 Jmeter针对Mysql的数据库处理的知识点主要包括以上四项,大家可以根据实际工作的需求去扩展使用~详情可参照Jmeter官网 https://jmeter.apache.org/