jmeter如何连接Oracle数据库,并作为变量传输,不好用算我的!!
我们在写jmeter脚本时,会遇到这样一个问题,参数化的数据要放到一个参数文件中,但是我们业务库里的数据是经常会有变化的,所以每次用到脚本的时候总是要重新连上数据库再执行一遍查询语句。然后再将新数据更新到参数文件中,有点麻烦,懒人创造世界,所以更高级的做法就是直接连接数据库,不动一兵一卒。
第一步:准备好Oracle数据库驱动,没有驱动的,贴心的附上链接啦:链接:https://pan.baidu.com/s/16kTio2YQh2_K3cdjZOPWjQ
提取码:z9lt
第二步:将下载好的驱动放在一个路径下(我是放在jmeter安装目录的lib路径下了,其实路径无所谓,我习惯性把扩展文件放在lib下)
第三步:打开jmeter,在测试计划下选择Oracle数据库驱动的放置路径,如图所示
第四步:在线程组下,添加一个jdbc connection configuration,下面database connection configuration里是必须要填写的内容,
其中database url 是指数据库的连接地址:jdbc:oracle:thin:@ip:端口号/实例
jdbc.driver.class 是要连接的数据库类型,不同的数据库连接方式不同,这是一个下拉选框,常用的就是MySQL和Oracle的连接方式,这里我连接的是Oracle
username和password 就是数据库的用户名和密码了
如下图所示:
第五步:在线程组下,创建一个jdbc request :
SQL Query:注意填写的sql语句未尾不要加“;”
Variable names:保存sql语句返回结果的变量名
Result variable name:创建一个对象变量,保存所有返回的结果
Query timeout:查询超时时间
Handle result set:定义如何处理由query type :select statement语句返回的结果
variables names设置为A,,C,那么如下变量会被设置为:
A_# (总行数)
A_1=第1列, 第1行
A_2=第1列, 第2行
C_# (总行数)
C_1=第3列, 第1行
C_2=第3列, 第2行
- 如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。
- 如果第一次返回6行数据,第二次只返回3行数据,那么第一次那多的3行数据变量会被清除。
- 可以使用${A_#}、${A_1}...来获取相应的值
第七步:就是在你引用的地方通过${A_#}、${A_1}...来获取相应的值.
这里我定义的是taskid,我要引用返回值的第一列第一行的值我就可以在第六步的时候通过${taskid_1},来引用。
好像,又遇到一个问题,如果我想引用返回的所有值,该怎么办?压测不可能只引用一个值的,但以上引用的方法中,没有一个是可以引用所有值并且依次读取的。思索良久后,想出以下方法:
第八步:添加循环控制器
循环控制器:如图所示:${taskid_#}代表取到的总行数,例如总共有2条数据,这里循环次数就是2
第九步:添加计数器:如图所示,starting value=1 开始值是从1开始
递增 =1 表示依次加1
maximum value =${taskid_#} 表示最大值为2(因为上面说到了返回值总行数是2)
引用名称 num 表示在其它地方可以通过${num}的方式引用
第十步:通过函数助手来执行嵌套函数引用:__V 嵌套函数引用
__V可以用于执行变量名表达式,并返回执行结果。
例如 ${taskid_1} 执行正常,但是我想把1用变量${num}来替换。 ${taskid_${num}}这个就没办法在jmeter中执行了
但是使用__V函数后,以上的嵌套函数就可以正常使用了,具体如下:
生成后的这个${__V(taskid_${num},)}就可以直接引用在自己的传参里了