JMeter 是 Apache开发的压力测试开源软件,是100%纯Java的应用程序,同时又是一款接口测试工具。设计用于模拟负载测试功能行为和衡量性能,最初是为测试Web应用程序而设计的,但后来扩展到了其他测试功能。 Apache JMeter 可用于测试静态和动态资源、Web动态应用程序的性能,能够对于应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序返回了期望的结果。 它可以用来模拟服务器、服务器组、网络或对象上的重负载,以在不同压力类别下测试其强度或分析不同负载类型下的总体性能。 博主本文着重从 Jmeter 测试后端数据库 MySQL 的切入点入手,展示 Jmeter 性能测试的部分基本操作。
JDK
前往 oracle 官网下载 建议最好是 JDK1.8 以上版本 新建一个系统变量 JAVA_HOME,变量值为 JDK 所在路径,如 D:\Program Files (x86)\Java\jdk1.8.0_191 需要编辑系统变量path,增加 %JAVA_HOME%\binJmeter 安装与启动
前往 Jmeter 官网下载压缩包,无需安装直接解压到某个路径,如 D:\Program Files (x86)\Apache\apache-jmeter-5.0,目录介绍如下图
在 Jmeter 路径 D:\Program Files (x86)\Apache\apache-jmeter-5.0\bin 下输入 jmeter.bat,即可启动 Jmeter (GUI) 图形化界面
Jmeter 也讲了,如果要进行测试,应该使用 Non GUI 模式
指令如下
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]Jmeter 是 100% Java 应用程序,要用 Jmeter 发送大量的 SQL 数据查询给 MySQL 数据库,以此来测试其性能;就必须要用到 Java 连接 MySQL 的驱动。
进入数据库服务器端(VMWare虚拟机)
cd 到 XAMPP 的 mysql 的 bin 路径下
或通过 XAMPP Control Panel 的 Shell
首先登录 mysql 的 root 账户
mysql --user root --password -- 或 mysql -u root -p笔者密码设置为空故直接回车,之后进入的却是 MariaDB 命令行,但是表慌 😉 这种情况的原因是 MySQL 被 Oracle 收购后,MySQL 的作者 Michael Widenius 为了解决社区版被闭源的风险,开发了 MySQL 分支,随后用他小女儿 Maria 的名字起名为 MariaDB,而 MySQL 本身就是用他另一个女儿 My 命名的,这位大爷就是厉害啊,orz,哈哈。MariaDB 与 MySQL的有高度的兼容性,毕竟是姐姐妹妹嘛。
言归正传,然后命令行 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操作及结果如下:
查询结果
测试计划中 “添加 jar 包到 Classpath“,选择下好的 mysql-connector-java-5.1.28.jar
根据测试需求,配置线程组的线程数、Ramp-up时间、循环次数等
添加配置元件 JDBC Connection Configuration
准备好配置的值:
Variable Name for created pool
myjdbcDatabase URL
jdbc:mysql://mysql数据库服务器IP地址:mysql端口号/要连接的database名称如:
jdbc:mysql://192.168.8.134:3306/db_userJDBC Driver class
com.mysql.jdbc.DriverUsername & Password
root 123456填入以上配置参数,其他参数选择默认
JDBC Connection Configuration 中 Database 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操作结果如下
添加取样器 JDBC Request
配置 JDBC 请求:
包括填入之前 JDBC Connection Configuration 里设置过的变量名,选定测试SQL语句的类型,书写性能测试要围绕进行的SQL语句。
添加察看结果树、汇总报告、图形结果、响应时间图等等监听器;在监听器中,可以看到这个查询或其他SQL语句所耗费的时间、效率、吞吐量、QPS等等一系列性能测试指标。
结果如下
察看结果树可看到响应的具体数据
用其他监听器查看性能指标 设置集合点、检查点、添加断言、断言结果等等
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运行并查看性能测试结果
博主唯一首发,写这篇博客一来为了提醒自己的知识记忆,二来记录过程,三来践行交流分享精神;-)