Jmeter 远程压测 JDBC for MySQL 数据库

本文详细介绍使用JMeter进行MySQL数据库性能测试的过程,包括JMeter的安装与配置、数据库准备、JDBC测试步骤及结果分析。

一、Jmeter

1、Jmeter介绍

     JMeter 是 Apache开发的压力测试开源软件,是100%纯Java的应用程序,同时又是一款接口测试工具。设计用于模拟负载测试功能行为和衡量性能,最初是为测试Web应用程序而设计的,但后来扩展到了其他测试功能。
     Apache JMeter 可用于测试静态和动态资源、Web动态应用程序的性能,能够对于应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序返回了期望的结果。
​     它可以用来模拟服务器、服务器组、网络或对象上的重负载,以在不同压力类别下测试其强度或分析不同负载类型下的总体性能。
     博主本文着重从 Jmeter 测试后端数据库 MySQL 的切入点入手,展示 Jmeter 性能测试的部分基本操作。

image-20200902231743734

2、JMeter特性
  • 能够加载和性能测试多种不同的应用程序/服务器/协议类型:
    • Web-HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET等)
    • SOAP/REST Web服务
    • 文件传输协议
    • 通过JDBC的数据库
    • 基于JMS的消息中间件(MOM)
    • 邮件-SMTP、POP3和IMAP
    • 本机命令或shell脚本
    • 传输控制协议
    • Java对象
  • 允许快速测试计划录制(从浏览器或本机应用程序)、生成和调试
  • CLI模式(Non GUI模式/无头模式)从任何Java兼容操作系统(Linux、Windows、Mac OSX等)负载测试
  • 一个完整的准备好呈现动态HTML报表
  • 通过从最流行的响应格式中提取数据的能力,HTML,JSON,XML或任何文本格式
  • 完全的便携性和100%纯Java
  • 缓存和离线分析/回放测试结果
3、Jmeter安装
  • JDK

    image-20200830215810882

    • 新建一个系统变量 JAVA_HOME,变量值为 JDK 所在路径,如 D:\Program Files (x86)\Java\jdk1.8.0_191

    image-20200830220322797

    • 需要编辑系统变量path,增加 %JAVA_HOME%\bin

    image-20200830220740926

  • Jmeter 安装与启动

    • 前往 Jmeter 官网下载压缩包,无需安装直接解压到某个路径,如 D:\Program Files (x86)\Apache\apache-jmeter-5.0,目录介绍如下图

      image-20200830223831792

    • 在 Jmeter 路径 D:\Program Files (x86)\Apache\apache-jmeter-5.0\bin 下输入 jmeter.bat,即可启动 Jmeter (GUI) 图形化界面

      image-20200830222457229

    • Jmeter 也讲了,如果要进行测试,应该使用 Non GUI 模式

      指令如下

      jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
      
4、Jmeter 测试 JDBC 的场景

Jmeter 是 100% Java 应用程序,要用 Jmeter 发送大量的 SQL 数据查询给 MySQL 数据库,以此来测试其性能;就必须要用到 Java 连接 MySQL 的驱动。

二、服务器端准备数据库数据

1、MySQL命令行

进入数据库服务器端(VMWare虚拟机)

cd 到 XAMPP 的 mysql 的 bin 路径下

image-20200830023003050

或通过 XAMPP Control Panel 的 Shell

image-20200830023348068

2、数据库操作准备测试数据

首先登录 mysql 的 root 账户

mysql --user root --password  -- 或 mysql -u root -p

笔者密码设置为空故直接回车,之后进入的却是 MariaDB 命令行,但是表慌 😉
这种情况的原因是 MySQL 被 Oracle 收购后,MySQL 的作者 Michael Widenius 为了解决社区版被闭源的风险,开发了 MySQL 分支,随后用他小女儿 Maria 的名字起名为 MariaDB,而 MySQL 本身就是用他另一个女儿 My 命名的,这位大爷就是厉害啊,orz,哈哈。MariaDB 与 MySQL的有高度的兼容性,毕竟是姐姐妹妹嘛。

image-20200830024059818

言归正传,然后命令行 SQL 操作数据库,准备待测试数据。当然可以通过创建带有 while 循环的存储过程 PROCEDURE,或其他方法来批量插入大量的随机测试数据;但是本文重点不在此,故只是插入少量数据;另外如果要大批量插入,建议建表时更换数据库引擎为 InnoDB

-- 查看现有数据库
SHOW DATABASES;
-- 创建一个database,db_user
CREATE DATABASE db_user CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 切换至db_user
USE db_user;
-- 创建一张table,tb_user
CREATE TABLE tb_user(username varchar(20),password varchar(30));
-- 往tb_user中插入数据
INSERT INTO tb_user (username,password) VALUES ('Tom',md5('123456')),('Jerry',md5('67890'));
-- 查询验证操作
SELECT * FROM tb_user;

SQL操作及结果如下:

image-20200830034248116

查询结果

image-20200830034508382

三、Jmeter 测试 JDBC 步骤

1、测试计划配置

测试计划中 “添加 jar 包到 Classpath“,选择下好的 mysql-connector-java-5.1.28.jar

image-20200830005609387
2、线程组配置

根据测试需求,配置线程组的线程数、Ramp-up时间、循环次数等

image-20200830010326088
3、线程组添加配置元件: JDBC Connection Configuration
(1) Jmeter 操作

添加配置元件 JDBC Connection Configuration

image-20200830013402296

准备好配置的值:

  • Variable Name for created pool

    myjdbc
    
  • Database URL

    jdbc:mysql://mysql数据库服务器IP地址:mysql端口号/要连接的database名称
    

    如:

    jdbc:mysql://192.168.8.134:3306/db_user
    
  • JDBC Driver class

    com.mysql.jdbc.Driver
    
  • Username & Password

    root  123456
    

填入以上配置参数,其他参数选择默认

image-20200830013940718

(2) MySQL 操作

JDBC Connection ConfigurationDatabase URL 使用了ip地址来访问某个MySQL数据库服务器;

而要通过ip地址实现访问MySQL,就必须要先在数据库服务器上开通允许远程设备连接的权限。

-- 切换到mysql数据库
USE mysql;
-- 授予全部权限,'root'@'%'为所有主机的root账号,‘123456’为远程连接到mysql的密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
-- 刷新权限后生效
FLUSH PRIVILEGES;
-- 查询设置成功
SELECT host,user,password FROM user;

在数据库服务器端,SQL操作结果如下

image-20200830035732287

4、线程组添加取样器:JDBC Request

添加取样器 JDBC Request

image-20200830014423301

配置 JDBC 请求:

包括填入之前 JDBC Connection Configuration 里设置过的变量名,选定测试SQL语句的类型,书写性能测试要围绕进行的SQL语句

image-20200830015152077

5、添加监听器

添加察看结果树、汇总报告、图形结果、响应时间图等等监听器;在监听器中,可以看到这个查询或其他SQL语句所耗费的时间、效率、吞吐量、QPS等等一系列性能测试指标。

image-20200830015841080

结果如下

察看结果树可看到响应的具体数据

image-20200830040614318

用其他监听器查看性能指标
image-20200830041821206
设置集合点、检查点、添加断言、断言结果等等
image-20200830041706597

四、本文性能测试总结

1、首先MySQL数据库服务器端准备好了待测数据。
2、Jmeter中创建测试计划,并且添加 mysql-connector-java-5.1.28.jar的jar包。
3、创建线程组,设置线程数、Ramp-up、循环次数等
4、线程组添加配置元件 JDBC Connection Configuration,设置变量名,要连接的数据库URL( jdbc:mysql://192.168.8.129:3306/db_1 ),驱动包名 com.mysql.jdbc.Driver,远程连接的账号密码。
5、在数据库服务器端授权远程设备可以通过ip连接MySQL数据库
6、线程组中添加取样器 JDBC Request,设置JDBC连接配置里的变量名,选择要测的SQL查询语句类型,以及SQL语句。
7、添加察看结果树、汇总报告、图形结果等之类的监听器
8、Jmeter运行并查看性能测试结果

五、博主原创手动码字,喜欢就点赞收藏哦

博主唯一首发优快云,写这篇博客一来为了提醒自己的知识记忆,二来记录过程,三来践行交流分享精神;-)

使用 JMeter 进行压力测试,通常包括以下几个关键步骤: ### 3.1 创建试计划 在 JMeter 中,所有试都是围绕“试计划”展开的。打开 JMeter 后,首先创建一个新的试计划(Test Plan)。试计划是组织和运行试的基础,所有的线程组、取样器、监听器等都包含在这个计划中。 ### 3.2 配置线程组 添加一个线程组(Thread Group),用于定义虚拟用户的数量、启动延迟时间以及循环次数。线程组决定了模拟用户的操作方式和负载强度。可以设置多个线程组来模拟不同类型的用户行为[^3]。 ### 3.3 添加取样器 根据要试的目标服务类型,选择合适的取样器(Sampler)。例如: - **HTTP 请求**:用于试 Web 应用程序。 - **JDBC 请求**:用于对数据库进行压力测试,在此需要配置 JDBC Connection Configuration 并为连接命名,以便后续请求使用该配置[^5]。 - **FTP 请求**、**SMTP 请求**等:用于试其他类型的服务。 ### 3.4 参数化与随机值生成 为了使试更接近真实场景,可以通过 CSV 数据文件或内置函数实现参数化。JMeter 提供了丰富的随机值生成方法,如随机字符串、日期、数字等,以提高试的真实性[^1]。 ### 3.5 添加监听器 监听器(Listener)用于查看试结果。常用的监听器包括: - **查看结果树**:显示每个请求的响应数据。 - **聚合报告**:提供平均响应时间、吞吐量等性能指标。 - **图形结果**:以图表形式展示响应时间的变化趋势。 ### 3.6 分布式试配置 当单台机器无法产生足够的负载时,可以配置分布式试环境。具体步骤如下: - 在主控机的 `jmeter.properties` 文件中配置远端执行机地址,例如:`remote_hosts=192.168.1.125:1099,192.168.1.126:1099`。 - 在远端机器上启动 `jmeter-server.bat`(Windows)或 `jmeter-server.sh`(Linux)。 - 在 JMeter GUI 中点击“远程启动”按钮,开始分布式试。 ### 3.7 非 GUI 模式运行脚本 为了节省资源并提高效率,可以在非 GUI 模式下运行 JMeter 脚本。命令格式如下: ```bash sh jmeter.sh -n -t /path/to/testplan.jmx -l result.jtl ``` 其中: - `-n` 表示非图形界面模式。 - `-t` 指定试计划文件。 - `-l` 指定输出结果文件。 ### 3.8 导出与扩展插件 如果需要自定义功能或增强试能力,可以将脚本导出为 JAR 文件,并将其放入 JMeter 的 `lib/ext` 目录下,然后重启 JMeter 以加载插件[^4]。 ### 示例代码:JDBC 请求配置 以下是一个简单的 JDBC 请求配置示例: ```xml <JDBCDataSource Configuration> <VariableName>mysqlDB</VariableName> <JDBCDriver>com.mysql.cj.jdbc.Driver</JDBCDriver> <ConnectionString>jdbc:mysql://localhost:3306/testdb</ConnectionString> <Username>root</Username> <Password>password</Password> </JDBCDataSource> <JDBCRequest> <Query>SELECT * FROM users WHERE id = ?</Query> <ParameterValues>1</ParameterValues> <VariableNames>id,name,email</VariableNames> </JDBCRequest> ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值