一、工具介绍
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
3、选择版本后下载等待(下载资源好网址pansou.com)
4、解压安装
直接解压即可,然后进入bin目录,点击jmeter.bat弹出命令框,随后打开了图形界面如下:
一开始打开是英文版的,汉化的需要通过编辑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:
2、主要参数配置
在测试计划上右击,添加—>线程—>线程组
根据实际情况设置并发用户数:
配置好之后,保存,ctrl+s。会选择保存jmx文件路径
3、打开主要的窗口
在线程组上右击打开主要的窗口,包含:录制脚本、响应信息、测试信息等
先打开TCP取样器,主要就是录制请求脚本:
配置脚本类型,这里使用的是xml报文,直接使用文本格式,默认的就是org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl,其次输入测试项目的ip和端口,并把文本复制到中间的文本框中,需要注意的是,选择文本格式的录制,xml报文需要送上报文长度,这里的报文长度不是很精确的,我用java算出来的字节数是1325,但是这里用1325,服务端会长久等待数据请求结束标志,最后会read timeout,具体原因不太清楚,暂时先试出了长度1289:
到这里主要的配置已经完成了,就可以直接运行了(点击工具栏的绿色的三角),在工具栏的最后面是运行的时间以及错误、并发用户数,错误可以直接点击查看
测试当然需要查看结果信息,需要打开的菜单有:察看结果数、图形结果以及聚合报告,这些都是在右击菜单中的监听器下面。
四、测试步骤
1、先运行一次,建立连接,保证联通性后,进行并发测试;
2、跟踪查看结果数
可以看到上面图中,成功的事务显示绿色,失败的即显示红色,可以查看具体错误信息:
也可以查看图形结果
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:有一半的服务器响应时间低于改值而另一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小。
3、跟踪查看聚合报告:
Label:httpRequest name属性值。
Samples:测试的过程中所有用户发出的总请求即总线程数,(如果模拟10个用户,每个用户迭代10次,这里就显示100),对应图形报表中的样本数目。
Average:单个Request的平均响应时间,计算方法是总运行时间除以发送到服务器的总请求数,对应图形报表中的平均值。
Median:50%用户的响应时间。
90%Line:90%用户的响应时间。
Min:服务器最短响应时间,单位毫秒。
Max:服务器最长响应时间,单位毫秒。
Error%:错误率,请求的数量/请求的总数。
Throughput:吞吐量,默认情况下表示每秒完成的请求数。
KB/Sec:每秒从服务器接收到的数据量,即每秒钟请求的字节数。
五、生成报告并分析
不仅可以通过系统界面查看测试结果,还可以通过命令导出测试报告。
在bin文件夹上右击弹出命令行,并输入:
不太了解命令,通过 ./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是不会出现上面的错误,但是可能会出现下面的错误
把中间的-r给去掉,不需要连接远程服务器。
结束后找对应的报告目录D:/home/下面的index.html
打开之后,就可以查看网页版报告,具体报告分析参考: