一、什么是JMeter

Apache JMeter™应用程序是开源软件,是一个100%纯Java应用程序,设计用于加载测试功能行为和度量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。

二、JMeter可以做什么

Apache JMeter可以用于测试静态和动态资源(Web动态应用程序)上的性能。它可以用来模拟服务器、服务器组、网络或对象上的高负载,以测试其强度或分析不同负载类型下的总体性能。

2.1 Apache JMeter功能包括

  1. 能够加载和性能测试许多不同的应用程序/服务器/协议类型:
  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects
  1. 全功能的测试IDE,允许快速的测试计划记录(从浏览器或本机应用程序),构建和调试。
  2. 命令行模式(命令行模式(以前称为非GUI) / headless模式)从任何Java兼容的操作系统(Linux, Windows, Mac OSX,…)加载测试
  3. 一个完整的,准备好呈现动态HTML报告
  4. 通过从最流行的响应格式(HTML、JSON、XML或任何文本格式)提取数据的能力,可以轻松地关联
  5. 完全的可移植性和100%的Java纯度。
  6. 完整的多线程框架允许多个线程并发采样,并允许不同线程组同时采样不同的函数。
  7. 缓存和离线分析/重放测试结果。
  8. 高度可扩展的核心:
  • 可插拔取样器允许无限的测试能力。
  • 可脚本化的采样器(兼容jsr223的语言,如Groovy和BeanShell)
  • 几种负载统计信息可以用可插拔计时器来选择。
  • 数据分析和可视化插件允许极大的扩展性和个性化。
  • 函数可用于为测试提供动态输入或提供数据操作。
  • 通过第三方开源库Maven、Gradle和Jenkins轻松持续集成。

三、环境准备

3.1 Jmeter下载

3.2 下载mysql数据库的驱动包

sysbench 压测 mysql mysql压力测试工具_linux

3.3 测试服务器准备

序号

服务器类型

CPU

内存

IP地址

系统环境

1

CentOS 7

四核

4G

192.168.61.63

MySQL 5.7

四、Jmeter安装

4.1 将文件解压到指定文件下,找到启动脚本,双击启动


sysbench 压测 mysql mysql压力测试工具_数据库_02

4.2 启动成功后,Jmeter图形化界面如下


sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_03

五、Jmeter配置

5.1 添加MySQL驱动

点击“测试计划”,然后点击下方的“浏览”,在弹出的窗口中选择我们之前下载的mysql驱动包


sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_04

5.2 新建一个线程组


sysbench 压测 mysql mysql压力测试工具_linux_05

设置线程数100,循环次数10000,共计1000000条数据


sysbench 压测 mysql mysql压力测试工具_数据库_06

5.3 添加MySQL链接


sysbench 压测 mysql mysql压力测试工具_jmeter_07

sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_08

5.4 添加JDBC Request


sysbench 压测 mysql mysql压力测试工具_jmeter_09

配置JDBC Request,以及建表语句:

-- singleTest.t_user definition

CREATE TABLE `t_user` (
  `userid` varchar(64) NOT NULL COMMENT '用户id',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';


sysbench 压测 mysql mysql压力测试工具_jmeter_10

5.5 添加随机变量


sysbench 压测 mysql mysql压力测试工具_jmeter_11

配置随机变量:randomage,取值区间为:18~60


sysbench 压测 mysql mysql压力测试工具_数据库_12

5.6 添加响应断言


sysbench 压测 mysql mysql压力测试工具_jmeter_13

5.7 添加断言结果


sysbench 压测 mysql mysql压力测试工具_数据库_14

5.8 添加查看结果树


sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_15

5.9 添加图形结果


sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_16

5.10 添加聚合报告


sysbench 压测 mysql mysql压力测试工具_mysql_17

5.11 添加汇总报告


sysbench 压测 mysql mysql压力测试工具_linux_18

六、数据库压测

6.1 图形化测试

配置合适的线程和循环次数,点击执行按钮,等待压测完成。


sysbench 压测 mysql mysql压力测试工具_数据库_19

查看压测结果,平均值8ms,吞吐量(QPS和TPS)10540.7/sec


sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_20

sysbench 压测 mysql mysql压力测试工具_sysbench 压测 mysql_21

6.2 命令测试

6.2.1 修改测试计划

修改测试计划为:100线程,循环10000次,共计插入数据1000000条。


sysbench 压测 mysql mysql压力测试工具_mysql_22

6.2.2 执行测试命令
6.2.2.1 切换CMD目录地址


sysbench 压测 mysql mysql压力测试工具_jmeter_23

6.2.2.2 执行命令
# .\result\t_user\singleTest.jtl --> 测试结果存放路径
# .\result\t_user\singleTest --> 存放web报告保存路径,如果没有该路径,可以自动生成
.\jmeter.bat -n -t .\test-demo\单库\MySQL单库测试线程组.jmx -l .\result\t_user\singleTest.jtl -e -o .\result\t_user\singleTest


sysbench 压测 mysql mysql压力测试工具_linux_24

生成压测web报告如下:


sysbench 压测 mysql mysql压力测试工具_linux_25

6.2.2.3 命令介绍

jmeter -n -t -l
示例: jmeter -n -t testplan.jmx -l test.jtl

示例含义:则表示以命令行模式运行testplan.jmx文件,输出的日志文件为test.jtl
参数介绍
这里是我们使用非 GUI 模式运行测试脚本时可以使用的一些命令,Jmeter官网用户手册介绍如下:
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile -> the jmeter test(.jmx) file to run
-l, –logfile -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost -> Set a proxy server for JMeter to use
-P, –proxyPort -> Set proxy server port for JMeter to use

具体的含义如下:

-h 帮助 -> 打印出有用的信息并退出

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-l 日志文件 -> 记录结果的文件

-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器

-H 代理主机 -> 设置 JMeter 使用的代理主机

-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号