jmeter-JDBC请求

jmeter-JDBC请求

1、做JDBC请求,首先要了解这个JDBC对象是什么,现在已SQLServer为例来说明

首先下载对应的数据库驱动mysql-connector-java-5.1.7-bin.jar,将mysql的jar包放到jmeter的lib/ext目录中

不同的数据库和JDBC驱动程序需要不同的JDBC设置。下面是一些可能的设置:

2、添加线程组(如果没有将mysql驱动的jar包放置jmeter的lib/ext文件目录下,可在测试计划中引入此jar包:测试计划-浏览-jar包存放的路径)

3、添加配置元件 JDBC Connection Configuration

Ps 下面介绍比较重要的几个参数其他地方可照截图配置即可。

  • Variable Name:连接名称,自定义填写。
  • Validation Query验证查询,不同版本的填写格式可能不同(比如3.1是Select 1,2.6是Select1),格式错误会报错。最新的Jmeter3.3已经做成下拉框,比较人性化。
  • Database URL:数据库url,格式固定。
  • jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
  • jdbc:mysql:// 表明连接的数据库是mysql
  • ip 数据库服务器地址
  • port mysql端口号
  • dbname 数据库名称
  • useUnicode=true 使用Unicode编码格式(字符集编码格式)
  • characterEncoding=utf8 使用UTF-8解码(字符集编码格式)
  • allowMultiQueries=true 允许多个query一起使用(1个请求中添加多个sql语句)

4、添加JDBC request请求

扫描二维码关注公众号,回复: 8212242 查看本文章
  • Variable Name:与JDBC Connection Configuration中的Variable Name保持一致
  • Query Type:语句类型,查询用select,增删改用update,一起用可以选择callable
  • Query:填写对应的语句(这里用了一个简单的查询语句作为示例)

5、添加监听器-查看结果树,查看请求结果

 6、将参数进行参数化

方法一:

使用CSV元件,将语句对应的部分替换成CSV文件中内容(与http请求参数化方式一样)

方法二:

使用占位符,将替换语句中对应的部分

a:Query Type修改为Prepared Select Statement

b:在where子句中将参数数值填写为?

c :在下方的Parameter values中把值填上,多个参数用,分隔,数量与?保持一致(第一个值对应第一个?,以此类推)

d:Parameter types填为varchar,多个参数用,分隔,数量与?保持一致(不管什么数据类型均填写为varchar)

注意:

1、Parameter values只能用在where子句中,如果放在查询字段中的话,它会将该字段的结果全部替换为值本身,而不是数据库的查询结果。

2、Parameter values也可以使用变量噢,也就是CSV元件中定义变量后,可以在Parameter values中使用${}引用

 7、设置关联

由于查询返回的是一个结果集,以行列的形式呈现,所以,我们用通常的正则表达式提取是行不通的。但是,JDBC请求本身提供了这种功能,就是Query下方的Variable Name

Variable Name是按照查询结果列数取该列的所有值,多个参数以,分隔。我们以示例说明

Variable Name设置如图,为方便查看,我们添加一个Debug PostProcessor。查看参数结果。

从Debug PostProcessor的结果来看,Variable Name中定义的test1,test2,test3分别是查询结果中的第一、第二、第三所有的结果,test1_#则代表这一列结果的总数,也就是查询结果的总行数。如果要使用里面任意参数,直接${}引用就OK。

如果只想获取某一列的查询结果,有2种方法。 

方法1:直接修改sql,只查询需要的那一列,Variable Name中填写1个参数即可。

方法2:指定参数的列数,比如ssex的查询结果中为第三列,那么在Variable Name中可以写成这样,表示第一、第二列都为空,第三列的结果保存为test参数(,,test)。

 

Variable Name会将某一列的结果保存为数组,并可以直接引用,那么,我们现在想获取这个数组的所有结果,也就是获取这个字段所有的值,该怎么操作呢?

同样,有2种方法。

方法1:使用foreach控制器,因为Variable Name输出的是一个数组,那么就可以使用foreach控制器,将数组内的值全部取出来。

 

 

 虽然,foreach能够取出所有的值,但是foreach控制器是发现如果还能够往下取值,它就会自动循环,而不进行迭代。这在大多数情况不符合我们的使用需求

方法2:利用计数器,进行每次迭代的更替取值

切记,引用时使用${__v(sno_${sno})}

常见问题

1、出现报错:Cannot create PoolableConnectionFactory (Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.)时

看起来似乎是设置字符的问题,后来在JDBC连接配置那里将Database URL加上字符编码即可(?characterEncoding=UTF-8)

jdbc:mysql://127.0.0.1:3306/paydb?characterEncoding=UTF-8

2、出现:org.apache.avalon.excalibur.datasource.NoAvailableConnectionException: Could not create enough Components to service your request (Timed out).

出现这个原因是因为连接超时,增大Pool TimeOUT就可以了。

猜你喜欢

转载自www.cnblogs.com/jingdenghuakai/p/12051805.html