一、工具介绍

        Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。

       JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。

       另外,JMeter能够对应用程序做功能回归测试,通过创建带有断言的脚本来验证你的程序是否返回了期望的结果。

为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

可以测试很多类型的应用、服务、协议等

  • 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

下面是JMeter与LoadRunner的比较

 

JMeter

LoadRunner

开发语言

纯Java开发

使用C语言开发

支持应用

对Java为主的系统支持较好

支持比较全面

是否收费

开源免费

商业软件

学习成本

应用简单,上手快,Java自定义测试计划

功能复杂,学习成本高

协议支持

支持常见的HTTP/FTP/SMP等

支持较全面

自定义测试

支持使用Java编写Sample

使用完善的组件进行定制化测试

组件功能

Thread Group, Samplers, Listeners, Pre & Post processors

一套完整的测试组件,比如VU Generator, Controller, Analyzer, Load generator, Load calculator 和protocol advisor.

二、下载安装

1、下载地址

2、点击Download Releases

jmeter 压测mq消息队列堵塞_服务器

3、选择版本后下载等待(下载资源好网址pansou.com)

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_02

4、解压安装

直接解压即可,然后进入bin目录,点击jmeter.bat弹出命令框,随后打开了图形界面如下:

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_03

一开始打开是英文版的,汉化的需要通过编辑jmeter.bat,找到下面的代码改成一致即可:

if not defined JMETER_LANGUAGE (
    rem Set language
    rem Default to en_EN
    set JMETER_LANGUAGE=-Duser.language="zh" -Duser.region="CN"
)

因为在本地测试,使用window系统,需要去掉ssl的校验,在jmeter.properties中找到下面的配置并改成true:

 

server.rmi.ssl.disable=true

 

三、配置准备

1、新建测试计划

点击新建后,出现一个测试计划,修改名称,最好用英文,这里修改为TestPlan:

jmeter 压测mq消息队列堵塞_JMeter_04

2、主要参数配置

在测试计划上右击,添加—>线程—>线程组

jmeter 压测mq消息队列堵塞_java_05

根据实际情况设置并发用户数:

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_06

配置好之后,保存,ctrl+s。会选择保存jmx文件路径

jmeter 压测mq消息队列堵塞_服务器_07

3、打开主要的窗口

在线程组上右击打开主要的窗口,包含:录制脚本、响应信息、测试信息等

先打开TCP取样器,主要就是录制请求脚本:

jmeter 压测mq消息队列堵塞_压测工具_08

配置脚本类型,这里使用的是xml报文,直接使用文本格式,默认的就是org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl,其次输入测试项目的ip和端口,并把文本复制到中间的文本框中,需要注意的是,选择文本格式的录制,xml报文需要送上报文长度,这里的报文长度不是很精确的,我用java算出来的字节数是1325,但是这里用1325,服务端会长久等待数据请求结束标志,最后会read timeout,具体原因不太清楚,暂时先试出了长度1289:

jmeter 压测mq消息队列堵塞_服务器_09

到这里主要的配置已经完成了,就可以直接运行了(点击工具栏的绿色的三角),在工具栏的最后面是运行的时间以及错误、并发用户数,错误可以直接点击查看

测试当然需要查看结果信息,需要打开的菜单有:察看结果数、图形结果以及聚合报告,这些都是在右击菜单中的监听器下面。

jmeter 压测mq消息队列堵塞_服务器_10

四、测试步骤

1、先运行一次,建立连接,保证联通性后,进行并发测试;

2、跟踪查看结果数

jmeter 压测mq消息队列堵塞_java_11

可以看到上面图中,成功的事务显示绿色,失败的即显示红色,可以查看具体错误信息:

jmeter 压测mq消息队列堵塞_java_12

也可以查看图形结果

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_13

样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:有一半的服务器响应时间低于改值而另一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小。

3、跟踪查看聚合报告:

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_14

Label:httpRequest name属性值。
Samples:测试的过程中所有用户发出的总请求即总线程数,(如果模拟10个用户,每个用户迭代10次,这里就显示100),对应图形报表中的样本数目。
Average:单个Request的平均响应时间,计算方法是总运行时间除以发送到服务器的总请求数,对应图形报表中的平均值。  
Median:50%用户的响应时间。
90%Line:90%用户的响应时间。
Min:服务器最短响应时间,单位毫秒。
Max:服务器最长响应时间,单位毫秒。
Error%:错误率,请求的数量/请求的总数。
Throughput:吞吐量,默认情况下表示每秒完成的请求数。
KB/Sec:每秒从服务器接收到的数据量,即每秒钟请求的字节数。

五、生成报告并分析

不仅可以通过系统界面查看测试结果,还可以通过命令导出测试报告。

在bin文件夹上右击弹出命令行,并输入:

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_15

不太了解命令,通过 ./jmeter - 可以查看所有的操作符用法,通过./jmeter --help

Usage
        --?
                print command line options and exit
        -h, --help
                print usage information and exit
        -v, --version
                print the version information and exit
        -p, --propfile <argument>
                the jmeter property file to use
        -q, --addprop <argument>
                additional JMeter property file(s)
        -t, --testfile <argument>
                the jmeter test(.jmx) file to run. "-t LAST" will load last
                used file
        -l, --logfile <argument>
                the file to log samples to
        -i, --jmeterlogconf <argument>
                jmeter logging configuration file (log4j2.xml)
        -j, --jmeterlogfile <argument>
                jmeter run log file (jmeter.log)
        -n, --nongui
                run JMeter in nongui mode
        -s, --server
                run the JMeter server
        -H, --proxyHost <argument>
                Set a proxy server for JMeter to use
        -P, --proxyPort <argument>
                Set proxy server port for JMeter to use
        -N, --nonProxyHosts <argument>
                Set nonproxy host list (e.g. *.apache.org|localhost)
        -u, --username <argument>
                Set username for proxy server that JMeter is to use
        -a, --password <argument>
                Set password for proxy server that JMeter is to use
        -J, --jmeterproperty <argument>=<value>
                Define additional JMeter properties
        -G, --globalproperty <argument>=<value>
                Define Global properties (sent to servers)
                e.g. -Gport=123
                 or -Gglobal.properties
        -D, --systemproperty <argument>=<value>
                Define additional system properties
        -S, --systemPropertyFile <argument>
                additional system property file(s)
        -f, --forceDeleteResultFile
                force delete existing results files and web report folder if
                 present before starting the test
        -L, --loglevel <argument>=<value>
                [category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com
                .example.foo=WARN
        -r, --runremote
                Start remote servers (as defined in remote_hosts)
        -R, --remotestart <argument>
                Start these remote servers (overrides remote_hosts)
        -d, --homedir <argument>
                the jmeter home directory to use
        -X, --remoteexit
                Exit the remote servers at end of test (non-GUI)
        -g, --reportonly <argument>
                generate report dashboard only, from a test results file
        -e, --reportatendofloadtests
                generate report dashboard after load test
        -o, --reportoutputfolder <argument>
                output folder for report dashboard

禁掉了ssl是不会出现上面的错误,但是可能会出现下面的错误

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_16

把中间的-r给去掉,不需要连接远程服务器。

jmeter 压测mq消息队列堵塞_jmeter 压测mq消息队列堵塞_17

结束后找对应的报告目录D:/home/下面的index.html

jmeter 压测mq消息队列堵塞_JMeter_18

 

打开之后,就可以查看网页版报告,具体报告分析参考: