每周读书与学习->JMeter性能测试脚本编写实战(三)如何利用JMeter为MySQL数据库构造测试数据

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。

在前面的学习中,介绍了很多Jmeter的理论知识,包括Jmeter中很多不同元件的详细介绍以及每个元件的作用,本次主要从实践的角度来介绍怎么用这些元件来完成常见性能测试脚本的编写,将会介绍一些常见的性能测试脚本编写案例。

在上一次分享中,分享了前一个请求返回的结果作为后一个请求的入参的案例,本次将分享如何利用JMeter为MySQL数据库构造测试数据

1、如何利用JMeter为MySQL数据库构造测试数据

在性能压测中,经常需要构造大量的数据以在测试环境中模拟出类似生产环境中同等的数据量,以便让性能压测更加贴近真实的生产环境,JMeter不但是一个很好的性能测试工具,而且还可以用其来构造性能测试数据,如下示例将演示如何使用JMeter给指定的表中插入10万条数据。

首先在MySQL数据库中创建两张表,其建表语句分别如下所示:
create table jmeter_test_one

(

id bigint(20) NOT NULL AUTO_INCREMENT,

user_id varchar(11),

user_name varchar(25),

PRIMARY KEY (id)

);

create table jmeter_test_two

(

id bigint(20) NOT NULL AUTO_INCREMENT,

user_id varchar(11),

address varchar(25),

PRIMARY KEY (id)

);

在MySQL数据据中创建成功后,如下图所示。

MySQL数据库服务器的配置信息如下表所示。

|--------|----------------------------------------|
| 服务器类型 | 配置说明 |
| 数据库服务器 | 内存:2GB CPU:2核 部署软件:MySQL 操作系统:CentOS 7 |

由于JMeter 直接连接MySQL数据库,需要jdbc driver,所以需要先从MySQL的官网https://www.mysql.com/products/connector/ 下载jdbc driver,如下图所示。

启动JMeter,在JMeter的测试计划界面中,添加下载好的MySQL jdbc driver,如下图所示,通过点击浏览按钮,选择下载好的MySQL jdbc driver的路径,就可以将driver 添加进来了。

在测试计划中,添加一个Thread Group(线程组),然后在线程组下添加一个JMeter 的计数器元件,这里我们使用计数器来作为插入时的变量引用,引用名称设置为id,如下图所示,在计数器中做如下设置:

  • Starting value:表示起始值,这里设置构造数据的起始值为1。
  • 递增:表示构造数据时,每次递增多少,这里设置为1。
  • Maximum:表示数据的最大值设置为多大,通常可以设置为一个无穷大的数据即可,这里设置为100000000。
  • 数字格式:表示数字的格式,比如0001或者00001类似这样,也可以为空,这里不做任何的设置。
  • 引用名称:设置定义的计数器变量的名称,可以在jmeter的其他元件中作为参数引入使用。

在线程组下添加JDBC Connection Configuration 元件,并且在JDBC Connection Configuration的配置界面,配置MySQL JDBC的连接信息,如下图所示,相关的配置信息如下:

  • Variable name for created pool:设置创建的连接池的变量名称,这里设置为testpool。
  • Max number of connection:设置最大连接数,这里设置为10。
  • Max wait:设置最大等待时长(单位为毫秒),这里设置为10000。
  • Time between Eviction Runs:设置线程可空闲时长(单位为毫秒),这里设置为60000。
  • Auto commit:设置数据库事务是否自动提交,这里设置为True,表示开启数据库事务自动提交模式。
  • Transaction isolation:设置数据库事务隔离级别,这里选择DEFAULT。
  • Database url:以JDBC协议的格式输入目标数据库的URL地址。
  • Jdbc driver class:设置jdbc的驱动名称,在这里选择com.mysql.jdbc.Driver。
  • Username:设置连接目标数据库的用户名。
  • Password:设置连接目标数据库的密码。
  • Connection Properties:用于设置建立Mysql JDBC连接时需要自定义指定的连接属性。

在Thread Group 下添加JDBC Request取样器元件,如下图所示。

在JDBC Request 取样器中,配置我们的数据库插入操作,如下图所示,在中间的输入框中输入insert into jmeter_test_one(user_id,user_name) values('user_{id}','user_name_{id}');插入语句,其中${id}就是引用的计数器中定义的id变量。在variable name of pool declared in JdBC Connection Configuration中输入我们在JDBC Connection Configuration中定义的连接池名称testpool,并且将Query Type选择为Update Statement。如果是一次执行多条SQL语句,需要将Query Type选择为Callable Statement,update和delete 语句的Query Type和insert 语句的Query Type是一样的。

我们再在线程组下添加一个查看结果树组件,用于查看jmeter 请求是否成功,如下图所示,查看结果树通常用于Jmeter性能测试脚本的调试。

以上jmeter元件都添加好了后,就可以让jmeter 运行起来了,如下图所示所示,当运行时,可以从Jmeter结果树中看到JDBC Request 取样器的运行日志。

执行完成后,可以看到jmeter_test_one这张表已经插入超过10万条左右的数据,如下图所示。

使用同样类似的方式,再向jmeter_test_two表中也插入10万条数据,为接下来后面的MySQL数据库查询的性能压测做数据准备。

针对使用Jmeter构造数据总结如下:

l 合理使用Jmeter中的计数器元件,可以做到构造数据时的唯一性,避免重复数据。

l 合理使用好Jmeter中函数,可以构造出很多自己想要的数据格式,比如日期时间格式、IP地址、UUID等,如下图所示。

2、本次学习总结

读者们需要在做性能测试时,如果需要构造测试数据,知道如何借助JMeter来为数据库构造测试数据。

出处 :本次学习的内容参考自清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书

相关推荐
桦仔16 小时前
自动数据库索引压缩合并
性能调优·聚集索引
做个文艺程序员2 天前
MinIO第06篇:分布式集群部署、纠删码调优与生产级性能优化
性能调优·minio·高可用·安全漏洞·分布式部署·纠删码
ly76892 天前
Redis 内存优化与性能调优:编码转换、内存碎片与慢查询的定位链路
redis·性能调优·内存优化·慢查询·编码转换
gwf2163 天前
QP状态机详解:Reset→Init→RTR→RTS与建链握手过程
性能调优·rdma·qp状态机·linux内核驱动·ib_modify_qp·cm建链·irdma
gwf2165 天前
Completion Queue(CQ)与中断处理:轮询、中断聚合与错误码 —— 面向AI集群的驱动级深度剖析
驱动开发·性能调优·pcie·rdma·ai集群·中断聚合·cq
Helix2505 天前
Chrome 开发者工具进阶:长截图、网络调试与性能分析
前端·chrome·chrome devtools·使用技巧·性能分析·开发者工具·长截图
AI智讯中枢12 天前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
Web3&Basketball20 天前
Agent外传审计实战:3类失准事故拦截脚本
python·大模型·agent·性能调优·推理优化
hanchenxing21 天前
MySQL深分页优化:游标分页 vs 延迟关联 vs 子查询,实测对比MySQL
性能调优·分页优化
liferecords22 天前
第 12 讲 · Python 侧接入:火焰图定位热点与间接使用硬件加速
python·性能分析·鲲鹏·火焰图·ctypes