Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件作压力测试,它最初被设计用于Web应用测试但后来扩展到其余测试领域。 它能够用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。JMeter 能够用于对服务器、网络或对象模拟巨大的负载,来在不一样压力类别下测试它们的强度和分析总体性能。另外,JMeter可以对应用程序作功能/回归测试,经过建立带有断言的脚原本验证你的程序返回了你指望的结果。为了最大限度的灵活性,JMeter容许使用正则表达式建立断言。html
1. 下载JMeter
官方网站下载最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JMeter 2.9
使用JMeter依赖jdk,建议安装jdk 1.6版本
Linux下安装jdk参考文章:http://www.linuxeye.com/linuxrumen/Linux-install-JDK.html
Windowns下安装jdk同Linux下安装相似,这里就不介绍了。linux
2. 启动JMeter
这里就在win下进行,图形界面较为方便
在目录apache-jmeter-2.9\bin 下能够见到一个jmeter.bat文件,双击此文件,即看到JMeter控制面板。正则表达式
3. 运行预准备
如今来对LinuxEye进行压力测试,压力测试对象为随机的几个网页连接,这几个连接是写在一个文本文件中的,在压力测试的时候会随机读取。
1) 创建一个线程组,以下图数据库
为何要创建线程组?缘由很简单,由于咱们要模拟多个线程(用户)来访问LinuxEye。
线程属性部分中,线程数是启动多少个线程,我这里填写的是10,Ramp-Up Period (in seconds)表示线程之间间隔多少时间容许,单位是秒,好比若是填写10,那么10/10=1表示10个线程间每隔1秒钟请求网站。
循环次数:60个线程运行完毕算是一次,循环次数就是这样的一个请求过程运行多少次,我这里测试就填写的是2.
每次修改一个设置后,别忘记了保存一下。apache
2) 设置请求服务器、压力连接等信息
接下来很天然的是,咱们要测试的网站地址是什么?连接是什么?因此如今咱们就来设置这些信息。
右键点击咱们刚建立的线程组,在弹出的菜单中,选择添加->Sampler->Http请求,弹出以下图界面:服务器
路径:
假如你只是对一个连接进行压力测试,直接填写一个连接就ok,好比 http://www.linuxeye.com,可是大多数状况下都不是这样的,咱们这里须要多个连接,就如同刚开始讲到的那样,咱们要将多个连接保存到一个文本文件中,而后随机读取进行压力测试。咱们能够这么作,如图:网络
在选择一个功能下拉列表中选择_StringFromFile,而后在本机新建一个测试文件C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,在第一行(你也能够不在第一行)的值中填写测试文件的路径,以下图:并发
而后点击“生成”按钮,在生成按钮的左边文本框中将生成一个字符串如:
${__StringFromFile(C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,,,)}
在test.txt测试文件中,咱们每行写一个URL连接,以下格式:
/command
/linuxrumen
/program
/jianzhan
/command/cat.html
/command/chmod.html
/command/lsattr.htmlide
注意,每行前面并无http://www.linuxeye.com这样的信息,由于咱们在前面已经填写了服务器地址为www.linuxeye.com,这里就不必再为每一个url填写这个相同前缀了;另外,上面的url格式也只是个例子,表示域名后的部分。工具
这样一来,当咱们并不是请求的时候,就会从test.txt中随机选择url来进行压力测试。
另外值得注意的一个地方是,若是参数中有中文的状况,运行的时候可能会出现乱码,这个时候就须要注意你在Jmeter中的编码设置与你要请求的网页编码是一致的。
路径文本框下面的选项,能够按默认的就成,Use multipart/form-data for HTTP POST是当请求中有附件的状况,通常状况下都不用选中的。
3) 查看运行结果
鼠标右键点击线程组,在弹出的菜单中选择添加->监听器->用表格查询结果,以下图:
4. 运行
固然,在运行前,请把全部修改都保存好
运行后的结果表格以下:
各属性以下:
Sample:每一个请求的序号
Start Time:每一个请求开始时间
Thread Name:每一个线程的名称
Label:Http请求名称
Sample Time:每一个请求所花时间,单位毫秒
Status:请求状态,若是为勾则表示成功,若是为叉表示失败。
Bytes:请求的字节数
若是Status为叉,那很显然请求是失败了,但若是是勾,也并不能认为请求就必定彻底成功了,由于还得看Bytes的字节数是不是所请求网页的正常大小值,若是不是则说明发生了丢包现象,也不是彻底成功。
在下面还有几个参数:
样本数目:也就是上面所说的请求个数,成功的状况下等于你设定的并发数目乘以循环次数。
平均:每一个线程请求的平均时间
最新样本:表示服务器响应最后一个请求的时间
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布(这个我不是很理解)。
术语:一、线程组:测试里每一个任务都要线程去处理,全部咱们后来的任务必须在线程组下面建立。能够在“Test Plan(鼠标右击) -> 添加 ->Threads(Users) -> 线程组”来创建它,而后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内建立完全部的线程。若有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。二、取样器(Sampler):能够认为全部的测试任务都由取样器承担,有不少种,如:HTTP请求。三、断言:对取样器返回的请求结果给出判断是否正确。四、monitor:它的功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。