在许多平台各种的测试工具中,我学习并使用了JMeter测试工具。
采用JMeter测试工具对网站做负载测试,使用 JMeter图形结果和聚合图帮助测试系统在资源超负荷情况下的表现,分析网站承载力。我们可以采用JMeter来测试我们项目中的网站承载能力,但由于我们项目目前只做了移动Android端,还没有做出网页web端,所以本次测试报告我随机选取了一个网站来进行JMeter测试。
一、JMeter 介绍
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源的性能,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
二、JMeter 安装
1. 去 http://jmeter.apache.org/下载最新版本的JMeter,解压文件到任意目录
2. 安装JDK,配置环境变量JAVA_HOME.
3. 系统要求:JMeter2.11 需要JDK1.6以上的版本支持运行
4. JMeter可以运行在如下操作系统上:Unix,Windows和Open VMS.
5. 避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。
JMeter下载完后,进入bin目录运行jmeter.bat启动JMeter (注:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。若关闭了命令行窗口则全部关闭。)
打开之后默认显示的是英文,如果你想使用中文,那么通过Options->select language->Chinese即可,当然转为其他语言也是同样操作。
三、JMeter 测试
1、建立测试计划
启动JMeter后,JMeter会自动生成一个空的测试计划,用户可以基于该测试计划建立自己的测试计划。
2、创建线程组
JMeter中 每个测试计划至少需要包含一个线程组,一个性能测试请求负载是基于一个线程组完成的。我们在测试计划右键弹出下拉菜单(添加-->线程(用户)--->线程组)中选择线程组即可。
线程组主要包含三个参数:线程数、准备时长(Ramp-Up时间(秒))、循环次数。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数
准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为100 ,准备时长为1 ,那么需要1秒钟启动100个线程。
循环次数:每个线程发送请求的次数。如果线程数为100 ,循环次数为3 ,那么每个线程发送3次请求。总请求数为100*3=300 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本
3、添加HTTP请求
添加完成线程组后,在线程组上右键菜单(添加--->取样器--->HTTP请求)选择HTTP请求。
(可使用Badboy来录制脚本,然后直接导出JMeter的jmx文件,在JMeter运行)
一个HTTP请求的配置参数主要包括:
1.名称:本属性用于标识一个取样器,建议使用一个有意义的名称
2.注释:对于测试没有任何作用,仅用户记录用户可读的注释信息
3.服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址
4.端口号:目标服务器的端口号,默认值为80
5.协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http
6.方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等
7.Content encoding :内容的编码方式,默认值为iso8859
8.路径:目标URL路径(不包括服务器地址和端口)
(可以设置一个循环控制器来进行对目标页面进行反复压力测试)
在线程组上右键菜单(添加--->逻辑控制器--->循环控制器)选择循环控制器。
4、添加监听器
添加察看结果树,右键点击线程组,在弹的菜单(添加--->监听器--->察看结果树)中选择察看结果树。
添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。
添加图形结果,右键点击线程组,在弹的菜单(添加--->监听器--->图形结果)中选择图形结果。
5、运行
点击绿色三角形按钮就是运行
下图中的415报错为不支持的媒体类型
下图中的429报错为HTTP请求太多
6、查看监听器
(1)聚合报告
Label |
样本数 |
平均 |
中值 |
90%line |
95%line |
99%line |
最小值 |
最大值 |
异常% |
吞吐量 |
接收KB/sec |
发送KB/sec |
100线程 |
2141 |
849 |
142 |
2552 |
3908 |
9086 |
12 |
21226 |
22.65% |
40.2/sec |
117.35 |
14.72 |
200线程 |
4350 |
845 |
137 |
2669 |
3825 |
9905 |
10 |
22161 |
22.69% |
94.9/sec |
278.02 |
34.73 |
400线程 |
11032 |
818 |
137 |
2540 |
3705 |
9068 |
11 |
23274 |
22.65% |
338.9/sec |
986.14 |
124.06 |
图表含义说明如下:
Label:说明是请求类型,如Http,FTP等请求。
样本数量:也就是图形报表中的样本数目,总共发送到服务器的样本数目。
平均:也就是图形报表中的平均值,是总运行时间除以发送到服务器的请求数。
中值:也就是图形报表中的中间值,是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
90%line:是指90%请求的响应时间比。
最小值:是代表时间的数字,是服务器响应的最短时间。
最大值: 是代表时间的数字,是服务器响应的最长时间。
异常%:请求的错误百分比。
吞吐量:也就是图形报表中的吞吐量,这里是服务器每单位时间处理的请求数,注意查看是秒或是分钟。
KB/sec:是每秒钟请求的字节数。
(2)图形结果
图表底部参数的含义如下:
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布
学习心得体会:
JMeter是一个很方便小巧的开源测试工具,经过不断的扩展功能,它现在已经可以完成数据库、FTP等多种测试。 JMeter无需安装,它只需要有Java环境即可(即安装有JDK),在bin目录下直接运行 JMete.bat文件就可以打开使用了。我选择了中文页面方便操作,在使用过程中,可以任意添加一些逻辑控制器以及监听器等,方便自己查看测试结果,同时也能帮助分析测试数据,最后还可以导出聚合报告。