【测试工具】JMeter基本使用及MySQL数据库压力测试
JMeter基本使用及MySQL数据库压力测试
- 一、JMeter 简单介绍
- 二、JMeter 下载及配置
- 1.1 下载运行
- 1.2 测试计划配置
- 三、添加jdbc请求并设置变量
- 五、命令行执行测试计划
参考博客:
接口测试 —— jmeter与数据库的操作
【压测】通过Jemeter进行压力测试(超详细)
一、JMeter 简单介绍
Apache JMeter 是一款由 Apache 软件基金会开发和维护的开源性能测试工具,它采用纯 Java 编写,因此具备跨平台特性,可以在多种操作系统上运行。JMeter 主要设计用于负载和性能测试,尤其适合对 Web 应用程序进行测试,但它也适用于各种客户端/服务器架构的软件测试。
JMeter 功能特点概述:
- 压力测试:能够模拟大量并发用户向目标系统发送请求,以此评估系统在高负载情况下的性能表现,包括响应时间、吞吐量、并发用户数等指标。
- 兼容多种协议:除了 HTTP/HTTPS 协议外,还支持多种类型的测试,包括但不限于 FTP、SMTP、SOAP / REST Web Services、JMS、TCP、LDAP 和数据库(通过 JDBC)等。
- 动态与静态资源测试:既可以测试静态资源(如HTML、CSS、图片等)的加载性能,也能测试动态生成的内容,包括Java小服务程序(Servlets)、CGI脚本、数据库查询结果等。
- 可扩展性:JMeter 支持通过插件机制扩展功能,可以通过增加 .jar 文件到 lib/ext 目录中实现新协议的支持和其他功能增强。
- 脚本录制与回放:可通过代理服务器录制用户的浏览器交互过程,然后将这些操作转换为测试脚本进行回放和参数化。
- 多线程并发测试:JMeter 使用多线程框架,能灵活配置线程组模拟不同数量的并发用户,以及通过控制器安排不同的测试场景。
- 结果分析与可视化:提供丰富的测试结果展示方式,包括图表、表格报告,便于对测试结果进行详细分析和数据挖掘。
- 断言与验证:支持添加断言来验证服务器响应是否符合预期,可以使用正则表达式或其他条件判断来检查返回结果的有效性和完整性。
- 脚本编写与定制:除了图形界面之外,JMeter 还支持通过编程方式创建和执行测试计划,可以编写 BeanShell、JSR223 等脚本来实现更复杂的逻辑。
总之,Apache JMeter 是一个强大的负载测试工具,不仅限于基础的性能测试,还能用于功能性测试和回归测试,帮助企业确保其软件系统的稳定性和性能满足业务需求。
二、JMeter 下载及配置
1.1 下载运行
- jmeter下载地址
https://jmeter.apache.org/download_jmeter.cgi
- 我这里下的是zip包,解压在本机(windows)
- 因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境,本文就不讲安装JAVA环境了。主要就是安装JDK。
- 运行 jmeter.bat 成功启动
- 注意看CMD窗口的提示信息:
================================================================================
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
================================================================================
- 上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
-
并且修改JMeter批处理文件的环境变量:HEAP=“-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m”;这里根据你们的配置灵活设置
-
更改语言为中文
官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文 -
mysql的驱动包下载地址
https://dev.mysql.com/downloads/connector/j/
-
下载好mysql的驱动包(mysql-connector-xxxx.jar),放到jmeter的lib目录下
1.2 测试计划配置
1、选中测试计划,添加mysql驱动包
2、添加JDBC Connection Configuration(右键测试计划–>配置元件–>JDBC Connection Configuration),并配置数据库连接信息,如下图所示:
参数解释如下:
- DataBase URL: jdbc:mysql://192.168.38.133:3306/dataname?useUnicode=true&characterEncoding=utf-8
- 192.168.38.133:3306为数据库的地址和端口号;dataname为数据库名
- useUnicode=true&characterEncoding=utf-8 指定字符的编码解码格式utf-8
- JDBC Driver Class : com.mysql.jdbc.Driver 此为mysql数据库的驱动
- Username: 数据库的登录用户名
- Password: 数据库的密码
三、添加jdbc请求并设置变量
1、添加线程组–>右键线程组–>添加jdbc request,并做好设置
2、添加Debug PostProcessor用于查看变量phone值的获取,添加查看结果树并运行;得到以下结果。说明jmeter发起的jdbc请求及变量设置正常
3、添加Summary Report(汇总报告),在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。
- 可以调整Thread Group(线程组) 中相关线程参数进行压测
4、测试计划创建完成,记得点保存,这时候会生成一个pem的文件
五、命令行执行测试计划
前面我们说过,执行测试计划不能用GUI,需要用命令行来执行。(机器性能强劲的话请随意)
D:\PROGRAMMING\apache-jmeter-5.6.3\bin>jmeter -n -t testplan/docker-mysql8.jmx -l testplan/result/result.txt -e -o testplan/webreport
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
Creating summariser <summary>
Created the tree successfully using testplan/docker-mysql8.jmx
Starting standalone test @ 2024 Apr 12 16:04:14 CST (1712909054833)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
summary = 500 in 00:00:01 = 396.8/s Avg: 135 Min: 2 Max: 1071 Err: 0 (0.00%)
Tidying up ... @ 2024 Apr 12 16:04:16 CST (1712909056193)
... end of run
- testplan/RedisLock.jmx 为测试计划文件路径
- testplan/result/result.txt 为测试结果文件路径
- testplan/webreport 为web报告保存路径。
- Web报告如下:
监控手段
# cpu及内存
top
# IO吞吐量,正常范围是200MB以内
dstat -d
# IOPS(随机磁盘读取每秒钟多少次),机器硬盘,大概200左右
dstst -r
# 网卡, 正常的千兆网,100MB 左右
dstst -n