用JMeter对MySQL数据库进行压测( v 函数-嵌套变量)
转载链接:https://www.cnblogs.com/Jadie/p/8056541.html
参考链接:https://blog.csdn.net/qq_35389417/article/details/83749530
下载相关软件,以下是我使用的软件及版本
JMeter 5.41
MySqL 版本未知
mysql-connector-java-5.1.44-bin.jar
1、 下载mysql-connector-java-5.1.44-bin.jar包
https://www.mysql.com/downloads/
1)打开链接后,点下图按钮
 

 
 
2. 将mysql-connector-java-5.1.44-bin.jar 放到JMeter的lib目录下(放在别的目录下也可以),并在测试计划中添加mysql-connector-java-5.1.44-bin.jar

3. 添加一个线程组并且在线程组下添加配置元件JDBC Connection Configuration


4. JDBC Connection Configuration配置如下,为避免泄露公司数据隐私,数据库地址为虚构。
variable name:相当于是这个数据库的别名,随便起一个,在JDBC Request组件中 输入这个别名就可以知道是用的哪个数据库
Database URl:jdbc:mysql://ip:3306/库名
username:访问数据库的用户名
passwor:访问数据库的密码

有时候会报时区有问题,解决办法:可以再上图的Database URl 后面加上个时区,编码等,如
?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPu
jdbc:mysql://113.74.129.80:3306/j_site?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPu
5. 在线程组下添加取样器JDBC Request

6. JDBC Request配置如下

 
2)如果要参数化(对查询语句中的值进行参数化),
方法1:需要将JDBC Request下的配置改为如下
下图sql语句中 问号当占位符
参数化值、参数类型、变量名填写上

方法2:
可添加个用户自定义变量 组件,然后上图中的参数化值、参数类型填入的值清空,问号改为 '${变量名}'
将查询出的结果保存到变量,让其他模块调用
从数据库中随机查询出前10条信息中的 id,book_name,book_desc字段:select id,book_name,book_desc from book ORDER BY RAND() limit 10;
Varible names:定义了查询语句中3个变量,用来接收sql出查出来的id,book_name,book_desc 3个字段的值。
 
7、使用上图中取出来的username、id、boo_name、book_desc的值
如${username_1} 、${id_1}、${id_2}、${id_3}. ....${id_10}

7. JDBC Request下添加一个断言,断言设置如下(断言意在检验查询结果是否正确,应根据实际查询语句设计)
JSON 断言:Assert JSON Path exists 与Expected Value值进行对比,两个值不一致时,执行脚本会报错
Assert JSON Path exists:http请求执行后返回的值
Expected Value:期望http返回的值,从JDBC Request获取到的值。如${id_1},其中id_1中的1肯能为2、3,是变量, 那1设为变量n, ${id_n}。
n和${} 相当于2个变量嵌套。需要用到 v 函数,从函数助手里拷贝函数${__V(,)},将两个嵌套的变量放到v函数里,如${__V(id_${n})}

 
http请求中的值也需要做参数化,如下图,如每次请求的接口地址中id是从数据库中返回的值,请求后返回的值再与数据库查询出来的值做对比。看看页面与数据库是否一致
 
添加响应断言:

8、对sql查到的10条数据都进行对比
1)添加计数器,设置:初始值是1,每次加1,变量为n

2)添加循环控制器,设置循环10次

9. 线程组下添加查看结果树

9. 点击运行,并在查看结果树中查看是否运行成功
                    
                
                
            
        
浙公网安备 33010602011771号