接到一个需求,需要测试一个http协议的restful接口,请求参数需要根据mysql数据库的一张表的数据来生成,现在它记录下来,给大家参考。
前置条件
首先需要mysql的mysql-connector-java库,可以到项目中的maven依赖库找,我找的是mysql-connector-java-8.0.22.jar,放置到jmeter的程序的lib位置上去。
连接数据库
1、建立数据库连接
线程池->添加->配置元件->JDBC Connection Configuration
其中需要注意的是Varible Name for create Pool, 这个变量值名称是代表了这个连接,后面需要引用到。另外DataBaseUrl 可以按照下面的格式参考
jdbc:mysql://ip:3306/nledu-cloud-teaching?serverTimezone=UTC
2、创建Jdbc Request,编写sql语句
线程池->添加->取样器->Jdbc Request
需要注意的的是Variable Name, 代表sql语句查询出来的变量名称,如果有多个,用逗号隔开。
3、启动执行查看结果
弄个结果树,查找sql执行结果
如果都没有问题,可以在结果树中看到sql查询的结果
编写http请求,执行测试计划
1、调试取样器
在执行实际测试前,先弄个调试取样器,明白参数值
线程池->添加->取样器->调试取样器
然后再启动一下执行,可以在结果器的调试取样器中看到,像下面的结果,task_id_#=8149表示了在8149列数据,task_id是之前的Variable Name,task_id_1可以一直到task_id_8149,都代表了sql查询的结果
2、添加循环控制器
循环控制器从1开始,到task_id_#,循环取值
线程池->添加->逻辑控制器->循环控制器
在循环次数中中写入${task_id_#},task_id的之前写的参数名,表示循环${task_id_#}
3、添加计数器
循环控制器->添加->配置元件->计数器
注意在Maximum value写入${task_id_#},引用名称表示后面要到用的变量名称,这边写index
4、使用函数助手生成表达式
Tools->函数助手对话框
选项一个功能,选项__V,函数参数值写task_id_${index},task_id之前的参数名,index是计数器的引用值 ,点击生成,生成的函数字符串是${__V(task_id_${index},)}
5、 编写Http请求,写入参数
把${__V(task_id_${index},)}写到Http请求需要的地方,比如参数,或者路径
然后点击执行,在结果中查看结果,请求会按照mysql结果的结果循环请求
这是最后的配置
还存在的问题
就是连接mysql和执行查询语句随着线程池的线程数增多,会重复执行,目前还没有找到解决办法。如下图所示,我用了3个线程,则连接数据库和查询语句重复执行了3次。如果使用setUp线程组,不同线程组参数共享还没有解决