JMeter对数据库的查询操作步骤详解
提示:
关于jmeter如何连接mysql数据库,前面文章已经详解的讲解过了。因为配置数据库连接是比较固定的步骤,这里就不重复讲解了。
本篇文章主要详细说明,使用jdbc request
组件,如何对数据库进行查询的各种操作。
jmeter中查询语句的操作步骤:
- 添加测试计划。
- 添加线程组,设置线程组的次数。
- 添加
jdbc connection configuration
组件,配置数据库连接。 - 添加
jdbc request
请求,编写sql语句,使用参数化。运行脚本,发送sql请求。 - 添加察看结果树,查看结果。
1、使用“用户自定义变量”实现参数化
即:在sql query
使用参数化变量。
在jmeter中,有两个地方可以设置“用户自定义变量”。
一种是“测试计划”界面中设置“用户自定义变量”。
一种是添加配置元件中的“用户自定义变量”。
我们以“测试计划”为例。如下图:
(1)在“测试计划”界面中设置“用户自定义变量”。
我们添加了一个自定义变量用户id,如下图:
(2)在jdbc request
界面的sql query
中,使用${变量名}
的方式进行引用。
- 我们在
varíable name
填写对应的数据库配置名称,与jdbc connection configuration
组件中的varíable name
对应。 -
query type
:选择select statement
,因为我们只进行一条查询的sql语句。 - 编写sql语句,并使用
${变量名}
方式引用参数化变量。
如下图所示:
2、 在sql query中使用占位符传递参数
传递的参数值有常量和变量之分。
(1)传递的参数值是常量
传递2个常量:用户id=3,用户名=孙悟空。
需要注意:
- 如果我们需要发送带有占位符的sql语句,
query type
:需要选择prepared select statement
。 -
parameter values
参数值和parameter types
参数类型,都必须要填写(参数类型与表设计结构中的类型一致即可)。如果有多个占位符,就需要有多组数据,之间用逗号分隔。 - 发送sql请求时,第一个参数会自动赋值给第一个占位符,以此类推,注意参数的编写顺序。
如下图所示:
(2)传递的参数值是变量
也就是占位符所接收的参数是一个参数化变量。我们把对应常量的位置,变成参数化变量即可,其他同上。
如下图所示:
各种形式的参数化可以这样使用。关于参数化相关知识,前面文章有详细说明。
3、variables names参数的使用方法
variables names
参数的作用是,把sql语句查询出来的数据保存到变量中。一般查询返回几个字段,就用几个变量来进行接收,不同的变量之间用逗号隔开。
jmeter官网给的解释是:如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。
假如,sql语句返回2行,3列的数据,且variables names
中设置为a,b,c
,那么如下变量会被设置为:
a_#=2 # a列的总行数
a_1=3 # a列的第一个数据,也就是第1列, 第1行的数据
a_2=4 # a列的第二个数据,也就是第1列, 第2行的数据
b_#=2 # b列的总行数
b_1=sunwukong@1268.com # b列的第一个数据,也就是第2列, 第1行的数据
b_2=zhubajie@1268.com # b列的第二个数据,也就是第2列, 第2行的数据
c_#=2 # c列的总行数
c_1=孙悟空 # c列的第一个数据,也就是第3列, 第1行的数据
c_2=猪八戒 # c列的第二个数据,也就是第3列, 第2行的数据
说明:
如果返回结果为0,那么
a_#
和c_#
会被设置为0,其它变量不会设置值。如果第一次请求返回6行数据,第二次请求只返回3行数据,那么第一次那多的3行数据,在线程变量中会被清除。
可以使用
${a_#}
、${a_1}
来获取相应的值,作为参数化数据进行传递。可以添加
debug sampler
组件,来查看参数是否获取到了。
示例:
(1)jdbc request
组件界面内容
在variable names
中定义接收数据的变量名,多个变量名之间用逗号分隔。
如下图所示:
(2)查看结果
添加一个取样器debug sampler
用来查看输出的结果。(debug sampler
组件可以查看到jmeter脚本运行中所有的变量)
jdbc request
请求结果,如下图所示:
查看debug sampler
中的输出结果,如下图所示:
我们从上图中可以看到,jmeter把从数据库中查询出来的数据,存储在线程变量中了。
提示:
a
代表第一列所有的数据,a_#
可以获取到第一列的行数。a_n
可以获得第一列第n行的数据。b
和c
的功能类似, 假如我们只需要第一列和第三列的数据,可以写成a,,c
,中间的,
不可以省略。
4、result variable name参数使用方法
如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果。
示例:
(1)jdbc request
组件界面内容
在result variable name
中定义接收数据的变量名。
如下图所示:
(2)查看结果
添加一个取样器debug sampler
用来查看输出的结果。(debug sampler
组件可以查看到jmeter脚本运行中所有的变量)
jdbc request
请求结果,如下图所示:
查看debug sampler
中的输出结果,如下图所示:
(3)数据处理
上面查看到的结果集,我们如何应用里面的数据呢?
我们可以创建一个beanshell
取样器,也可以在jdbc request
取样器下一级添加后置处理器beanshell postprocessor
组件。
在里边编写如下代码,来获取需要的指定数据,提供给后面的接口请求使用。
对象中具体数据的获取方法:columnvalue = vars.getobject("resultobject").get(0).get("column name")
5、总结:
以上我们就把parameter values
、parameter types
、variable names
、result variable name
的使用方式进行了说明。
在日常工作中,可以举一反三,灵活使用。
6、注意事项:
(1)the server time zone value
服务器时区异常
如果报错,如下:
cannot create poolableconnectionfactory (the server time zone value '???��������??��??' is unrecognized or represents more than one time zone. you must configure either the server or jdbc driver (via the servertimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)
解决方法:数据库连接url后面加 servertimezone=gmt
或servertimezone=gmt%2b8
,即可解决。
(2)执行多条sql语句
执行多条sql语句时,查询语句select
和update
、insert
语句不能在同一个jdbc request
组件中执行。
当执行多条sql 语句时,每条语句后面加;
。
并且在 database url
后增加一个参数allowmultiqueries=true
,否则将不能够执行多条语句,报错。
(3)更新操作中文乱码
需要在 database url
后增加一个参数characterencoding=utf-8
,这样就可以解决更新操作时候的中文乱码了。
提示:一定要设置为utf-8编码吗?不一定,要跟你的数据库的编码保持一致,就不会中文乱码了。
(4)datebase url
添加参数规则
datebase url
后增加参数,在dbname
后加?
,如有多个参数,每个参数用&
隔开,如:
jdbc:mysql://127.0.0.1:3306/guest?servertimezone=gmt&useunicode=true&characterencoding=utf-8&allowmultiqueries=true
参考:https://www.cnblogs.com/linbo3168/p/6039489.html
以上就是jmeter对数据库的查询操作 的详细内容,更多关于jmeter数据库操作 的资料请关注其它相关文章!
下一篇: SQL注入的实现以及防范示例详解
推荐阅读
-
数据库(SQL Server )经典例题(二):对S表、P表、J表、SPJ表的操作——单表查询
-
MongoDB模糊查询操作案例详解(类关系型数据库的 like 和 not like)
-
oracle数据库中对字符串的查询长度、某字符所在位置操作讲解
-
荐 JAVA实现对已有数据库的插入、删除、更改、查询操作详细解释
-
数据库(SQL Server )经典例题(三):对S表、P表、J表、SPJ表的操作——多表查询
-
MyBatis对MySQL数据库的增删改查操作代码详解
-
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
-
JMeter对MySQL数据库进行压力测试的实现步骤
-
JMeter对数据库的查询操作步骤详解
-
C++对Mysql数据库的访问查询(基于Mysql5.0的API,vs2010中操作