因为要对之前做的wap网站进行压力测试,所以今天去下了一个jmeter,还找了不少相关资料,发现网上的教程已经很完备,常用的基本功能都讲到了,还有专门的用户手册和FAQ,下面按照jmeter的学习顺序,列出相应的网址,最后加上自己的一点心得。
1.jmeter下载
jmeter是apache的一个项目,可以在这里下载:http://jakarta.apache.org/jmeter/index.html
下载回来的压缩包里面有官方文档,不过是英文的,国内已经有人进行了翻译,在这个网址:http://wiki.javascud.org/pages/viewpage.action?pageId=5493
2.jmeter的基本操作
下载回来之后,按照这个网址的介绍开始一个简单的测试 http://www.testage.net/AutoTest/Opentest/200602/281.htm
3.jmeter高级应用
简单的web网站测试是自己手动建立一个http请求,但是如果是一系列的操作,则必须使用脚本录制功能。jmeter提供了类似LoadRunner等商业测试工具的脚本录制功能,原理都是相同的:jmeter创建一个代理服务器,然后你在浏览器中将代理服务器设为jmeter的代理服务器,这样所有的页面访问都会经过该代理服务器,jmeter就可以对其中的访问信息进行记录了,详细的使用方法,看篇尾
其中也涉及到了一些定时器的使用,那样可以更准确的模拟用户操作
4.jmeter的其他测试功能
jmeter原本只是用来对web服务器进行压力测试的,但经过不断的扩充已经可以用于多种测试了,比如数据库、jms等等,这篇文章对jmeter各个测试功能作了简单介绍,详细的可以参考手册
http://www.oioj.net/blog/user1/2826/archives/2006/351695.shtml
5.用jmeter进行分布式测试
如果单纯在一台机器上模拟多个用户并发,由于性能限制不能模拟太多的用户,这时可以用jmeter的远程测试功能同时启动多台机器进行模拟,以取得更加真实的效果
http://www.cnblogs.com/jackei/archive/2006/09/14/504638.html
最后加上一些自己的心得:
1.如何测试wap网站
测试wap本质上是和web一样的,都是经过代理服务器进行脚本录制,不过在我使用jmeter的过程中发现一个问题,在通过jmeter的http proxy server访问tomcat上的一个wap站点时,一些关于wap页面的头信息被改变了,当你用winwap等客户端模拟器访问时,不能识别出是wap 页面,也就是说,代理服务器把wap页面当作web页面转发给客户端,导致无法打开。我暂时没有找到解决方法,权宜之计是客户端换成openWave,这个客户端可以直接访问web类型的页面,反正我们的目的只是进行压力测试
2.如何模拟不同用户
现在的网站都是要先进行用户验证才能进行后续操作,如果单纯按照上面的脚本录制方式,那么模拟用户操作时,输入的用户名密码都是相同的,显然不可行,因为除了第一个用户其他都不能登录了。我们可以使用jmeter的“自定义用户变量”来模拟多个用户
在jmeter手册有提到一个组件叫CSV Data Set Config,专门用于从文本读入信息,保存到变量中,在其他组件中可以引用该变量。具体步骤如下:
1.新建一个文本文件,作为例子,文件内容如下:
aaa,111
bbb,222
这里用英文逗号为分隔符,也可以用其他为分隔符,在CSV Data Set Config中可以设置。
2.在你的测试计划中添加一个CSV Data Set Config,然后填写若干属性,其中,文件名是指保存信息的文件目录,可以相对或者绝对路径;文件编码一般可以不填,使用操作系统默认编码;变量一栏填入“user,pass”,表示两个变量名;分隔符一栏填入“,”(也是默认值),对应上一步文本文件里的分隔符;另外两个选项是问你是不是循环读入,因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
3.在需要使用变量的地方,比如之前记录的操作脚本中,需要提交的表单字段包含用户名密码,我们就可以用${变量名} 的形式进行替换,例如${user}和${pass}
4.附带说一下,通常有用户认证的地方都要用到cookie或者session,那么最好在测试计划中加入一个http cookie 管理器,直接添加一般不需要任何设置,否则可能会出现登录失败(在测试结果中,如果看到多次请求不同页面返回的字节数却是相同的,那多半是登录失败了)
5.最后,运行线程组即可看到效果,如果失败,那么检查一下文本的路径,变量大小写等等,手册上说使用相对文本路径时,要以测试配置文件(默认是jmeter的bin目录)的目录为参考,但是我试过似乎不行,换成绝对路径就可以了
6.详细的情况可以参考手册,不过中文版的似乎没有翻译完全,还是最好看英文吧
转自:http://www.blogjava.net/lauber/archive/2007/12/13/167440.html
在“工作台 ”添加“HTTP 代理服务器”
端口:
代理服务器的端口,默认 8080 ,可自行修改,但不要与其它 应用端口冲突
目标控制器:录制的脚本 存放的位置,可选择项为测试 计划中的线程组
分组:
对请求进行分组。“分组”的概念是将一批请求汇总分组,可以把 url 请求理解为组。
“不对样本分组”:所有请求全部罗列
“在组间添加分隔”:加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义
“每个组放入一个新的控制器”:执行时按控制器给输出结果
“只存储每个组的第一个样本”:对于一次 url 请求,实际很多次 http 请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。
记录 HTTP 信息头:
录制 request 的 head 信息
添加断言:
录制时加入空的检查点(需自行填写内容)
Regex matching :
录制时加入空的正则匹配(需自行填写内容)
在浏览器中录制
启动 HTTP 代理服务器后,打开浏览器( IE , Firefox , Opera 等),添加代理,地址填写本机 ip 或 host name ,端口填写刚刚设置的代理端口(本例中8080),在浏览器中进行正常网页浏览,即可录制下对应的http请求。IE上的设置: