1、下载对应数据库的jar包,放到jmeter的lib文件夹下
2、配置jdbc的配置原件
不同的数据库 url
写法不一样:
driver class
不同的数据库,也是不一样
mysql 5
: com.mysql.jdbc.Driver
mysql8
:手动编辑:com.mysql.cj.jdbc.Driver
3、使用JDBC取样器,编写数据库命令,存放查询到的数据
sql语句,CRUD
query type: select statement 、 update statement、 prepared select statement 、 prepared update statement
带有 prepared开头,是脚本中,可以带有参数
- sql中带参数的写法: 两种
- 直接在sql中,进行变量引用 ${var} 但是不推荐
- 用 ? 变量占位符 ====推荐
- 示例
select id from user where name=?and useid?
;这里将name条件的值进行参数化,防止sql注入 - 这时我们需要在下方的
Parameter values
处引用之前设置好的这个变量的值和Parameter types
类型,多个用,隔开
variable:变量名
variable names
:这里是将查询到的数据存入mobiles中
这种格式我们如果要调用,可以用foreach控制器进行调用
比如:你需要获取这个电话号码进行登录接口参数化
ForEach控制器:
调用测试结果:
这种只是适合做接口自动化,如果是做性能的话,我们没循环执行一遍都会去查询一次数据库,jmeter自身花费时间,测出数据不准确,所以我们应该只让他执行一次查询:
方案:使用仅一次控制器或者setUP线程组
1、setup线程组先从数据库读取数据存放在一个变量中,在把变量的值设置为属性,方便其他线程组调用,
使用循环控制器,把从数据库从读取的值,全部设置为属性
mobile_${d}:把每个属性的值存入一个变量中,方便后续调用
${__V(mobiles_${d},)}
:利用V函数拼接,数据库中读取的值,赋值给上面的变量
计数器元件(下面线程组的计数器也是一样的设置):
2、在主线程组中,参数化使用上面的值进行登录
${__P(mobile_${f},)}
:这里运用__P函数调用,属性的值,这里为什么是(mobile_${f}
而不是上面的(mobiles_${d}
,是因为上面一个线程组的计数器元件不能被其他的线程组使用,所以我在下面一个线程组中设置一个与上面线程组相同的计数器,这样调用
d
和
{d}和
d和{f}实际的下标是一样的,所以能够获取到设置的属性值
计数器元件:
这里的最大值(Maximun value):像循环从数据库中获取的总条数,但因为参数(mobiles_#)不能跨线程组使用,所以又设置成了属性,调用
注意:可以用__counter函数代替计数器,但是如果不是每次递增1的话,就不能用__counter函数
所以这样做下来,感觉使用仅一次控制器
的方案会更简单一些,后面去试一下。