JMeter 如何与 MySQL 进行整合测试

Stella981
• 阅读 945

做性能测试定位瓶颈的时候,定位到是因为某些 SQL 语句的查询慢所影响的,此时我们提出优化方案,肯定希望验证下优化后的 SQL,此时需要借助 JMeter 的 JDBC 请求,那么我们就需要学习 JMeter 如何与 MySQL 进行整合测试。

环境准备

除了 JMeter 外,还需要准备以下软件和 Jar 包:

  • MySQL 数据库服务端;
  • MySQL 的 JDBC 驱动 mysql-connector-java-5.1.13-bin.jar;

其中 MySQL 数据库下载完成后,按照提示安装即可,安装完毕在 cmd 命令行,执行 net start mysql 将其启动即可;当然这是验证自己本地数据库的操作,如果有远程数据库,那么请忽略此操作。

JDBC 驱动直接放置在 Jmeter/lib 目录下即可。

JMeter 测试 JDBC 请求

JMeter 测试 JDBC 请求,主要就是测试 SQL 查询语句,那么常见的查询语句一般分为以下几种情况:

  • 直接查询:即 select * form table;
  • 带 where 子句的查询:select a,b from table where a=''。

下面我们先来看第一种情况。

JMeter 测试不带条件的 SQL 语句

具体步骤如下:

(1)选中测试计划,添加 mysql-connector-java-5.1.13-bin.jar:

JMeter 如何与 MySQL 进行整合测试

(2)添加一个线程组:

JMeter 如何与 MySQL 进行整合测试

(3)在线程组下,添加一个 JDBC Connection Configuration(连接数据库组件),专门用来配置所测试的数据库连接信息:

JMeter 如何与 MySQL 进行整合测试

配置信息如下:

JMeter 如何与 MySQL 进行整合测试

(4)在线程组下,添加一个 JDBC Request,填写真正的 JDBC 请求:

JMeter 如何与 MySQL 进行整合测试

配置信息如下:

JMeter 如何与 MySQL 进行整合测试

说明一点:这里用到的 Query Type 为:Select statement,这是一个查询语句类型,如果在 Query 中查询的是一条语句,就可以采用这种查询类型,但是当查询语句多于一条的时候,就不能在使用此查询类型,需要设置 Query Type 为:Callable Statement。

另外:当 JDBC 脚本执行的时候,总是会优先去执行 Select statement 的第一行。

(5)在线程组下,添加查看结果树,运行结果,查看是否成功:

JMeter 如何与 MySQL 进行整合测试

完成以上操作,我们已经可以完成 JMeter 与 MySQL 的集成,并且可以查询 MySQL 数据库;那么如果我们想要每次执行一次查询,查询出一列固定的内容,依次查询出我们需要的列时,就需要借助参数化。

将查询语句参数化

一说到参数化,在 JMeter 里大家就应该想到 CSV Data Set config,本次依旧不例外。

具体步骤如下所示:

(1)在线程组下新增 CSV Data Set config,新建 txt 类型的文件,命名为 jdbd.txt,其内容如下:

JMeter 如何与 MySQL 进行整合测试

配置 CSV Data Set config 如下:

JMeter 如何与 MySQL 进行整合测试

(2)将 JDBC Request 里的 Query 语句设置为:select ${jdbc} from cf_tb_sequence

JMeter 如何与 MySQL 进行整合测试

(3)添加一个循环控制器,将循环次数设置为2:

JMeter 如何与 MySQL 进行整合测试

(4)运行后查看下结果树。

第一个 JDBC 请求显示的响应信息为:

JMeter 如何与 MySQL 进行整合测试

第二个 JDBC 请求显示的响应信息为:

JMeter 如何与 MySQL 进行整合测试

经过参数化后,我们可以循环查询每列的数据。

查询指定条件的语句

有些时候我们查询时,需要使用带 where 子句的查询 SQL,在 JMeter 的 JDBC Request 中同样可以实现此功能。

即使用占位符,来替换 SQL 语句中 where 子句指定的部分。

具体步骤如下:

(1)将 JDBC Request 请求中的 Query Type 修改为 Prepared Select Statement:

JMeter 如何与 MySQL 进行整合测试

(2)在 Query 中将 SQL 语句的 where 子句中的参数数值都使用?号进行代替。

举例:我们想要使用如下 SQL 查询语句:

select name,current_value from cf_tb_sequence where name = '0103' or current_value = '44';

我们此时写为:

select name,current_value from cf_tb_sequence where name = ? or current_value = ?;

JMeter 如何与 MySQL 进行整合测试

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

JMeter 如何与 MySQL 进行整合测试

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

JMeter 如何与 MySQL 进行整合测试

(5)禁用掉 CSV Data Set config,将循环控制器的循环次数变为1,此时运行查看结果树:

JMeter 如何与 MySQL 进行整合测试

可以看到我们成功查询出满足 select name,current_value from cf_tb_sequence where name = '0103' or current_value = '44'的数据。

结语:

跟大家推荐一个学习资料分享群:747981058,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
2星期前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
6个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这