首页 > 代码库 > JMeter压力测试
JMeter压力测试
临时客串了下性能测试人员,对Web页面进行了压力测试,做个记录,方便以后的查阅。
先用了阿帕奇的JMeter进行的压力测试,后来又使用了loadrunner。今天先整理下JMeter的压力测试。
先介绍下JMeter吧:
Apache JMeter是100%纯java桌面应用程序,被设计用来测试C/S结构的软件(例如web应用程序)。它可以被用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。JMeter可以用来模拟一个在服务器、网络或者对象上大的负载来测试或者分析在不同的负载类型下的全面性能。
他的优点有两个,一个是他是纯开源的JAVA程序,因此他支持插件开发,可以根据项目工程的需求进行插件开发,来达到你所需要的最终的结果数据。另一个就是它是免费的对于项目工程来说,节省一笔开资。
JMeter的运行环境以及安装就不说了,网上有很多教程的......自行查阅吧。
接下来就按我的使用过程进行叙述吧。
1、首先进入页面后选项里可以进行语言设置选项,因为第一次接触,所以选择了中文。进入的界面就是这样的。在workBench中右键添加---非测试元件---HTTP代理服务器
进入如下的的界面
2、打开IE浏览器,工具---Internet选项----连接---局域网设置
勾选代理服务器,地址填成localhost,端口号和之前建立的HTTP代理服务器中的端口号保持一致。
3、在JMeter的测试计划中右键测试计划添加—Threads---线程组
如下:
其中名称可以根据你所测试的部分进行命名。
然后说下线程属性,其中线程数就是你需要的并发量,压力测试,就是测试他能承受多大的并发量。而Ramp-Up表示的是每秒钟里启动的数量,循环次数就是指这些线程是否循环执行。
4、打开IE浏览器,输入你要测试的Web页面中需要测试的功能。比如现在测试登陆的功能,进入网址http://www.XXX.com。(根据你项目需求填写)
5、进入JMeter中的HTTP代理服务器,将目标控制器选择你之前建立的测试计划中的登陆,点击启动
然后在打开的网页中输入用户名和密码(我介绍的是登录界面,所以需要登录),然后点击登陆。
6、登陆完成后,进入JMeter的HTTP代理服务器,点击停止。在登陆的
测试计划中会出现自动生成的线程,如图所示。
这些线程则为有关登陆的线程,测试其他的功能模块也用如上的方法。
7、现在,页面中关于登陆的功能已经导入到了JMeter当中。进入JMeter当中进行模拟测试即可。 在测试计划下的登陆线程组当中右键添加---监听器(Listener)---查看结果树(View Result Tree)
如下图:
点击工具栏中的启动按钮(就是回放功能),让JMeter再次运行,有如下结果:
根据页面情况,如果登陆成功,页面会显示出欢迎XX光临,那如果响应数据中有欢迎则表示页面成功的跳转了。
8、通过观看查看结果树中的新生成的线程,查看右面的响应数据,我们可以得到如下
我们可以确定,欢迎出现在/client/shopclient/loginonLogin.action当中。
9、同样的,我们可以在测试计划的线程组当中添加断言并且保存,断言结果,设置如下:
10、断言结果中运行后,出现如下,则表示满足断言中要求。
如果没有找到你所设置的断言内容,则会提示Test failed。
11、JMeter同样可以模拟多用户同时登陆系统。在登陆线程组中右键添加---Sampler---HTTP请求
在HTTP
Request中。发送参数,可以将参数信息录入到文件当中,然后将参数的Value值设置为读取文件即可。其调用_StringFromFile函数,如下:
文件格式多为.dat文件,文件内容格式使用标准的TXT文件格式,如下图:
一行保存一条数据,如果一行有多个参数,用逗号分隔。
12、同样的,在线程组当中也可以添加其他的控件,比如添加循环控制器,Loop Controller等,添加循环次数,然后模拟多次运行。
13、添加结果图
可以根据用户的需求,选择结果图的样式,如果没有用户需要的,还可以下载其他的插件或者自己开发,同样可以满足。其中JMeter提供了Aggregate Graph的柱形图,Graph Results 线性图等,根据需要去选择不同的结果图。点击运行后做出最终的结果图。
14、结果图:
根据给予的指标,去判断最终的结果是否达标。可以勾选不同的显示图形,生成不同的图形曲线,从而进行判断。
注意
上面部分就是很简单的一些操作,自己具体鼓捣下就能出来。下面列举点自己当初遇到的问题。
1、脚本录制的时候,用JMeter录制脚本的时候,可以看上面图看出来,录制下了action,就是能够触发服务器相应的代码部分,但是当时我操作过程中,发现录制下来的信息没有能够触发服务器相应,这就相当于这个过程没有了意义。当时我的解决办法是换了一个录制工具,我使用了Badboy录制,然后将录制后的记过导入到了JMeter当中,再进行回放,问题解决。
2、线程设置那一块,如果要测试多线程,个人建议,少量的增加,可以以20,30往上面递增。由于是用JAVA编写的工具,工具本身的性能大家都清楚,如果并发线程太大了,小心服务没事,JMeter先挂掉了。基本上100-200,一台机器跑是没有问题的。鄙人曾经跑过1000个线程,很不幸的机器直接挂掉了,如果要跑大数据,建议多台机器进行操作。
3、工具的使用其实挺简单的,性能测试,压力测试里面最主要的部分在于性能分析。根据工具给你提供的数据,你要去分析你对应测试模块的性能如何,并且找出哪块的问题欠妥。如果你本身也是开发人员,找到对应的地方去修改,去优化性能。这才是最主要的问题。
不过么,毕竟是开源的东西,他的弱点就在于结果图上面,你无法定位到是数据库问题,是文件服务器问题,是代码问题等等。所以,这个工具在结果分析上面还是有点欠妥。当然,如果对于大神来讲,可以根据自己的需求,再去开发一些插件去跟踪想要观察的数据,但是开发成本又进入到了项目当中。
所以下次去说说Loadrunner这个工具,这个工具付费的,但是他的结果图相当的完美,完全能够满足你的需求。
JMeter压力测试