好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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数据库操作 的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/liuyuelinfighting/p/14886158.html

查看更多关于JMeter对数据库的查询操作步骤详解的详细内容...

  阅读:55次