Jmeter是免费开源的性能测试工具. 在如今越来越注重知识产权的今天, 公司越来越不愿意冒着巨大的风险去使用盗版的商业性能测试工具. 但如果不使用盗版, 昂贵的费用不是每一个中小型公司,甚至是大型公司愿意投入这么多钱. jmeter这个免费且好用的性能测试工具, 将会是我们不二的选择。
Jmeter是java语言编写,开放源代码。有了源代码,使得我们可以更深入的分析一些问题。(比如响应时间等),这样有助于我们更深刻理解性能测试,可以学习如何才能更精确的计量时间。商业软件就没有这个优点, 你想知道的东西,只能去看他们提供的文档,但文档并没有代码更能说服人。
meter下载地址:
http://jmeter.apache.org/download_jmeter.cgi 当前的版本是2.7 。
接下来我们就要进入正题。但在进入之前,我们不得不提google code里的 jmeter plugins. 由于jmeter开源且本身是一个框架,可以让第三方来加入自己的插件。 而这个 jmeter plugin又提供了更强大的feature,让我们更得心应手。尤其是那些熟悉loadrunner的测试人员,用了google code里的jmeter plugin,你就不会再觉得jmeter 太难用了。
我们还有必要说一下jmeter和lr的基本区别。由于jmeter是免费开源软件,GUI设计的确实不是多么美观,在controller和agent模式下的管理也非常不方便。但是jmeter可以支持第三方插件,且开源,所以还是有着旺盛的生命力。
jmeter可以实现的测试如下几种类型:
Web - HTTP, HTTPS
SOAP
Database via JDBC
LDAP
JMS
Mail - POP3(S) and IMAP(S)
google code里的jmeter plugins 可以增加如下的feature:具体支持的功能与增强特性,见http://code.google.com/p/jmeter-plugins/
一。安装jmeter
下载jmeter是一个zip包,解压后,如果您的os里已经安装了jre或jdk(如果没有安装jre,请先安装!jre版本请使用1.6 以上版本),windows则直接运行jakarta-jmeter-2.5.1\bin\jmeter.bat 就启动了该软件。正常情况一个主窗口会打开。linux就不多做介绍了.
二。安装jmeter plugins
http://code.google.com/p/jmeter-plugins/downloads/list 下载JMeterPlugins-0.5.1.zip,0.5.1 是当前最新版本。下载后,解压开。将里面的JMeterPlugins.jar文件,放入到JMETER_INSTALL_DIR/lib/ext里,重启jmeter。然后选择添加菜单,你就可以看到jp@gc为前缀的新的plugins. 之后会对主要的plugins做介绍。
![](http://blog.chinaunix.net/attachment/201112/26/1835840_1324900572gqCz.jpg)
下面就来实际用Jmeter创建一个web测试场景,并进行性能测试. 注:由于本人使用中文版本,使用英文版本的请注意具体的菜单及参数名称.
打开jmeter主窗口后, 选择左侧树形结构里的"测试计划". 然后右键选择添加, 选择"threads(users) 一个thread代表一个user",我们可以看到
![](http://blog.chinaunix.net/attachment/201112/26/1835840_1324901097UAE7.jpg)
jp@gc开头的是google jmeter plugins里的threads group, 稍后再做解释。其他三个thread group是 1) setup thread group 2) teardown thread group. 3) thread group(线程组). 如果您用过junit,想必你不会对setup ,teardown这2个字眼陌生。 即时每用过,也没关系。 熟悉lr的应该知道,lr的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块。 那么这里 setup thread group 和 teardown thread group 就是分别指这两部分。
ok,我们先添加一个线程组。
![](http://blog.chinaunix.net/attachment/201112/26/1835840_1324901544Qg4N.jpg)
jmeter自带的thread group非常简单。 一个thread 代表一个vuser,那么我们如果需要多少用户并发,设置多少线程数即可。ramp-up period, 本人理解是多少时间从0vuser 上升到您指定的vusers数。从这些参数可以看,非常简单。但不能设置测试的时间,这一点不是特别善解人意。不过还好我们有jmeter plugins, 带的thread group 添加了这个功能。
2。添加一个http sample (测试脚本的主体)
选中线程组,右键添加一个http sample。如图所示,用baidu作为被测系统。
![](http://blog.chinaunix.net/attachment/201112/26/1835840_1324902411Fj2J.jpg)
注意路径代表项目的绝对路径, 如测试首页citirisk/main.htm , 那么就需要加在这里.
我们可以输入默认的连接超时和响应超时时间。lr的默认为120秒。所以我们也同样输入120秒。
3。添加结果树, 右键Test Plan-->Add-->Listener-->View Results Tree(Table)
为了方便调试该测试脚本,我们同样在sample的后面添加一个“监听器”里的“查看结果树”。这样每次运行,默认会把每次的http请求的request 和response 内容记录下来,方便我们进行debug脚本。当脚本调试通过后,则我们需要将查看结果树立的“仅显示日志错误”选中,这样错误的便会记录下来,方便遇到错误,进行排查。
4。添加聚合报告(用来记录执行的http sample的执行结果等,需要手动添加),添加方式同上!!
聚合报告里可以记录成功的事务数, 平均响应时间(最大,最小,90%), 错误率,网络吞吐量,事务每秒。我们关心的测试数据基本都在这里。
5。那么我们就可以执行本次简单的测试了。
那么先来描述一下这次的测试场景。我们把vusers数改成2, 循环次数改为5次。
就是并发用户数: 2
思考时间:0
循环次数:5次,循环完毕停止测试。
6。清除之前的debug信息(ctrl+E),erase掉之前记录的测试数据,选择菜单“运行”-〉“启动”,则开始了本次测试。
![](http://blog.chinaunix.net/attachment/201112/26/1835840_1324903130bPoa.jpg)
有时候我们执行了测试,但是发现并不是所有事务都执行成功了. 那是因为我们只是发起了测试,但并没有对每次请求测试的返回作校验. 所以加入检查点是非常有必要的.
1. 在昨天的测试脚本中,选中http请求sample.
右键添加,选择"断言"->"响应断言". 如下图.
![](http://blog.chinaunix.net/attachment/201112/27/1835840_13249976296pEU.jpg)
设置如此的断言后,则会对响应的内容(即http请求后,服务器返回的内容)进行与字符串进行匹配. 如果返回的内容包括了字符串,则认为该次测试通过. 否则就是失败.