使用 JMeter 生成测试数据对 MySQL 进行压力测试

news2025/1/25 9:16:18
《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

文章目录

  • 1. 下载与安装
  • 2. 创建 Test Plan
  • 3. 创建 Thread Group
  • 4. 添加 MySQL JDBC Connection 配置
  • 4. 添加 JDBC Request Sampler
  • 5. 添加 View Results Tree
  • 6. 执行测试计划
  • 7. 已知错误
  • 8. 附录

数据库的压测工具和方法有很多,最简单的方法无非是编写脚本自动执行 INSERT INTO 语句,也有专门的 GUI 工具可以图形化配置测试计划,例如:Data Generator for MySQL 和 EMS Data Generator for MySQL 等,不过,绝大多数的图形化工具都是付费的。

实际上,对数据库的压测,也包括其他类型的压测,最主要的工作是:如何能简单地生成压测数据(Dummy Data),除了要生成与数据类型相符的字面量之外,更多的是要能控制好数据的取值范围,特别地,在数据库的压测中,受外键约束的影响,对于外键列的取值更不能使用随机值。

考虑到写脚本太麻烦,图形化工具收费还不通用,所以,我们还是选择使用老牌的压力测试工具:Apache JMeter,除了它内置了丰富的随机值生成方法外,还因为它是一个统一的压测平台,操作和配置都和其他类型的压测一致。

备注:本文以 Debezium 官方提供的 MySQL Docker镜像 中的 Inventory 数据库为示例介绍和演示压测步骤。

1. 下载与安装


JMeter 官方下载: https://jmeter.apache.org/download_jmeter.cgi

提示:在 Windows 下,请运行 ${JMETER_HOME}/bin/jmeterw.cmd (运行 jmeter.bat 会多打开一个 console 窗口)

MySQL JDBC Driver 官方下载:https://dev.mysql.com/downloads/connector/j/

解压 zip 包获得里面的 jar 包,将 jar 包放置到 ${JMETER_HOME}/lib 目录下

2. 创建 Test Plan


打开 JMeter 时,默认会自动创建一个空的 Test Plan,我们将其重命名为:Debezium MySQL Example Ddatabase Test Plan

image-20240220133920297

3. 创建 Thread Group


在刚创建的 Test Plan 上单击右键打开菜单,添加一个 Thread Group,其中 Number of Threads (users) 是并行的线程数,Loop Count 是重复执行的次数,假设我们的压测内容是插入一条数据,则执行一次 Thread Group 插入的记录数是两者的乘积。本例中,该测试计划将会插入 2 * 50 = 100 记录。

image-20240220134043246

在这里插入图片描述

4. 添加 MySQL JDBC Connection 配置


为使 JMeter 能联通 MySQL 数据库,测试计划的第一步就是创建 JDBC 连接的配置。在刚创建的 Test Group 上单击右键打开菜单,添加一个 JDBC Connection Configrutation,这里有两点需要注意:

  • JMeter 要求 JDBC 的 URL 必须指定数据库名,否则执行时会报错
  • 必须配置 Variable Name for created pool,否则执行时会报错

image-20240220134808317

4. 添加 JDBC Request Sampler


JMeter 负责向数据库发送 SQL 的组件是:JDBC Request Sampler,所以我们要创建一个 JDBC Request Sampler 并填入相应的 SQL 语句,在刚创建的 Test Group 上单击右键打开菜单,添加一个 JDBC Request:

在这里插入图片描述

在这里插入图片描述

在这里,Query Typle 选择 Upate Statement (这是 JDBC 中的 API),填入的 SQL 是整个测试计划中最核心的部分,所有的动态变量、取值范围等细节,都通过这条 SQL 实现了,因为我们使用了 JMeter 的函数和变量来生成期望的数值!

INSERT INTO `orders` 
	(`order_date`, `purchaser`, `quantity`, `product_id`) 
VALUES
	('${__RandomDate(,2016-01-01,2016-12-31,,)}', ${__Random(1001,1004)}, ${__Random(1,9)}, ${__Random(101,109)})

关于${__RandomDate(,2016-01-01,2016-12-31,,)}${__Random(1001,1004)} 这些 JMeter 的函数,请移步 JMeter 官方文档:https://jmeter.apache.org/usermanual/functions.html ,这里有细致地解释。

5. 添加 View Results Tree


View Results Tree 是用来查看执行结果的,在配置或执行过程中出错的话,可以在这里看到发送的请求和详细错误,是很有必要配置的一个组件。在刚创建的 Test Group 上单击右键打开菜单,添加一个 View Results Tree 即可,无需特别配置。

image-20240220141548007

6. 执行测试计划


完成上述配置后,就可以执行测试计划了,点击工具栏中的 “绿色开始按钮”,等待测试计划执行完毕,然后打开 View Results Tree 可以看到每次测试的详细情况,包括是否执行成功、发送的请求内容和得到的响应。如果初始尝试没有成功,可以在这里找到详细的错误信息,从而帮助定位问题并解决。

image-20240220142654988

7. 已知错误


1. Name for DataSoure must not be empty in JDBC Connection Configuration

执行测试计划时,JMeter 报错:

java.lang.IllegalArgumentException: Name for DataSoure must not be empty in JDBC Connection Configuration
	at org.apache.jmeter.protocol.jdbc.config.DataSourceElement.testStarted(DataSourceElement.java:119) ~[ApacheJMeter_jdbc.jar:5.6.3]
	at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:247) [ApacheJMeter_core.jar:5.6.3]
	at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:432) [ApacheJMeter_core.jar:5.6.3]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.base/java.lang.Thread.run(Thread.java:833) [?:?]

原因:JDBC Connection Configuration 和 JDBC Request 中没有配置 pool 的变量名,或者配置了,但取名不一样,改为相同的变量名即可:

image-20240220122631378

image-20240220122704434

8. 附录


以下是本文使用的 Debezium 官方提供的 MySQL Docker镜像 中的 Inventory 数据库的 orders 数据表的表结构:

-- Dumping structure for table inventory.orders
DROP TABLE IF EXISTS `orders`;
CREATE TABLE IF NOT EXISTS `orders` (
  `order_number` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` date NOT NULL,
  `purchaser` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  PRIMARY KEY (`order_number`),
  KEY `order_customer` (`purchaser`),
  KEY `ordered_product` (`product_id`),
  CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`purchaser`) REFERENCES `customers` (`id`),
  CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10008 DEFAULT CHARSET=latin1;

-- Dumping data for table inventory.orders: ~5 rows (approximately)
INSERT INTO `orders` (`order_number`, `order_date`, `purchaser`, `quantity`, `product_id`) VALUES
	(10001, '2016-01-16', 1002, 5, 104),
	(10002, '2016-01-17', 1002, 2, 105),
	(10003, '2016-02-25', 1002, 2, 106),
	(10006, '2016-02-29', 1002, 2, 106),
	(10007, '2016-02-28', 1001, 2, 106);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1474305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟看懂设计模式02:观察者模式

一、什么是观察者模式 观察者模式又叫做发布-订阅模式或者源-监视器模式。 结合它的各种别名大概就可以明白这种模式是做什么的。 其实就是观察与被观察,一个对象(被观察者)的状态改变会被通知到观察者,并根据通知产生各自的不…

二 线性代数-向量

1、向量的表示方法: 其中的 i、j、k是坐标轴方向的单位向量。 2、向量的模: 用坐标计算的方法: 3、向量的运算: 3.1 向量的加法减法: 3.2 向量的数乘: 拉格朗日乘数法的 基础 公式。 3.3 向量的数量积&a…

conda 导出/导出配置好的虚拟环境

一. 导出环境配置(yml文件) 1. 在主目录下激活虚拟环境(UE4是我的虚拟环境名称,请根据你自己的名称进行修改) conda activate UE4 2. 运行此代码 conda env export > environment.yml 二. 导入环境配置&#xf…

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版,以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

每日一题 — 移动零

力扣链接:283. 移动零 - 力扣(LeetCode) 思路:利用双指针将数组分为三个区间,三个区间分别表示的是:非0元素、0、待处理元素 当arr[cur] ! 0时 [0,dest]区间就需要加一,所以dest 然后再交换a…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

Python字符串切片操作原来这么简单!

字符串切片是Python中用于从字符串中提取子串的强大工具。通过指定开始和结束下标,以及可选的步长参数,可以轻松地截取字符串的一部分。 1.字符串切片原理 从字符串中复制指定的一段代码,生成一个新的字符串 2.字符串切片语法 字符串[开始…

2018-02-14 新闻内容爬虫【上学时做论文自己爬新闻数据,原谅我自己懒发的图片】

2018-02-14新闻内容爬虫【上学时做论文自己爬新闻数据,原谅我自己懒发的图片】资源-CSDN文库https://download.csdn.net/download/liuzhuchen/88878591爬虫过的站点: 1QQ新闻 1,准备爬取滚动新闻页面 2 通过F12 开发工具查找发现&#xff…

Linux配置JDk环境

下载jdk 官网地址:Java Downloads | Oracle 将下载的jdk上传到服务器 不管你使用什么工具和方法,只要将安装包上传到服务器就可以了 解压文件 tar -xvf jdk-8u341-linux-x64.tar.gz 配置环境变量 用vim /etc/profile进入编辑状态,加入下边…

python中的数字类型Number

Python 数字(Number) Python 数字数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建: var1 1 var2 10Python 支持三种不同的数值类型…

2024年阿里云服务器新购、续费、升级优惠政策汇集!

2024年阿里云服务器购买、续费、升级优惠政策整理,阿里云服务器优惠价格表:轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年,云服务器4核16G10M带宽26元1个月、149元半年,阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价…

【开源】使用opencv进行交互式抠图,让你开发效率翻倍

这是一个简单的交互式图像分割应用程序,由python opencv和pyqt编写。 这个应用程序在opencv中应用Grabcut算法对图像进行抠图。Grabcut是Graphcut算法的改进版本。查看这些论文(paper1, paper2)了解详细信息~~ gui部分主要来自这个伟大的工作labelImg。这是一个非常…

【报错处理】命令提示符安装npm install yarn -g失败两种解决方法

目录 方法1:方法2: 方法1: 等待两分钟后发现总是显示如下报错: 在搜索栏搜索命令提示符,将命令提示符以管理员身份运行,如果弹出窗口选择“是”。 3.接着输入命令,结果还是报错,方…

【手机端测试】adb基础命令

一、什么是adb adb(Android Debug Bridge)是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…

某电力铁塔安全监测预警系统案例分享

项目概述 电力铁塔是承载电力供应的重要设施,它的安全性需要得到可靠的保障。但是铁塔一般安装在户外,分布广泛,且有很多安装在偏远地区,容易受到自然、人力的影响和破环。因此需要使用辅助的方法实时监控铁塔的安全状态&#xff…

(十八)devops持续集成开发——使用docker安装部署jenkins服务

前言 本节内容介绍如何使用docker容器来部署安装jenkins流水线服务。关于docker容器的安装本节内容不做介绍。请读者提前安装。 正文 ①使用docker查找jenkins官方镜像 ② 拉取jenkins官方镜像jenkins/jenkins,选择一个最新稳定版本,避免一些插件不兼…

ThreadLocal 使用示例

ThreadLocal 使用示例 public class BaseContext {private static ThreadLocal<Long> threadLocal new ThreadLocal<>();/*** 设置值* param id*/public static void setCurrentId(Long id){threadLocal.set(id);}/*** 获取值* return*/public static Long getCur…

LabVIEW光伏逆变器低电压穿越能力测试

LabVIEW光伏逆变器低电压穿越能力测试 随着光伏发电技术的迅速发展&#xff0c;光伏逆变器的低电压穿越&#xff08;LVRT&#xff09;能力日益成为影响电网稳定性的关键因素。为了提升光伏逆变器的并网性能&#xff0c;开发了一套基于LabVIEW的光伏逆变器LVRT测试系统。该系统…

数据结构知识点总结-绪论 数据结构基本术语 算法及评价

要求 (1)对数据结构这么课学了哪些知识有个清楚的认知; (2)掌握目录结构,能复述出来每个知识点下都有哪些内容。 如下图所示,可自行制作思维导图,针对自己薄弱的地方进行复习。 绪论 相关术语 绪论中会介绍数据结构的一些基本概念,要对数据模型有基本的了解。 数据…

简单流程引擎实现

技术栈 vue3gojsprimevuelodashc#sql server 效果展示 参考文档 初学者笔记 官网demo 实现思路 运用官方demo&#xff0c;将gojs的数据结构转换为需要的数据库记录实际数据分为两部分&#xff1a;存储gojs节点、节点关系数据&#xff1b;实际业务数据。gojs数据负责存储流…