使用JMeter完成常用的压力测试

上传人:cn****1 文档编号:560310605 上传时间:2022-12-11 格式:DOC 页数:16 大小:205KB
返回 下载 相关 举报
使用JMeter完成常用的压力测试_第1页
第1页 / 共16页
使用JMeter完成常用的压力测试_第2页
第2页 / 共16页
使用JMeter完成常用的压力测试_第3页
第3页 / 共16页
使用JMeter完成常用的压力测试_第4页
第4页 / 共16页
使用JMeter完成常用的压力测试_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《使用JMeter完成常用的压力测试》由会员分享,可在线阅读,更多相关《使用JMeter完成常用的压力测试(16页珍藏版)》请在金锄头文库上搜索。

1、使用JMeter完成常用的压力测试本文介绍了JMeter相关的基本概念。并以JMeter为例,介绍了使用它来完成最常用的三种类型服务器,即Web服务器、数据库服务器和消息中间件,压力测试的方法、步骤以及注意事项。讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度。影响软件响应速度的因素有很多,有些是因为算法不够高效;还有些可能受用户并发数的影响。在众多类型的软件测试中,压力测试正是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户的访问时,软件的抗压能力。

2、本文以JMeter为例,介绍了如何使用它来完成常用的压力测试:Web测试、数据库测试和JMS测试。概述JMeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的。到目前为止,它的最新版本是2.1.1,它的测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JMS、WebService、LDAP等多种对象的测试能力。在最新的2.1.1中,它还提供了对于JUNIT的测试。JMeter的安装非常简单,从官方网站上下载,解压之后即可使用。运行命令在JMETER_HOME%/bin下,对于Windows用户来说,命令是jmeter.bat。运行前请检查JMeter的文档,查

3、看是否具备相关的运行条件。对于最新版(即2.1.1),需要JDK的版本要求是JDK1.4。JMeter的主要测试组件总结如下:1. 测试计划是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器。2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提

4、下执行压力测试。这个限制对于有效的测试是非常有用的。6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。8. 定时器负责定义请求之间的延迟间隔。JMeter的使用非常的容易,在ONJ上的文章UsingJMeter提供了一个非常好的入门。常用测试压力测试不同于功能测试,软件的正确性并不是它的测试重点。它所看重的是软件的执行效率,尤其是短时间内访问用户数爆炸性增长时软件的响应速度,压力测试往往是在功能测试之后进行的。在实际的开发过程中,软

5、件潜在的效率瓶颈一般都是那些可能有多个用户同时访问的节点。就目前JavaEE的平台下开发的软件来说,这种节点通常可能是:Web服务器、数据库服务器和JMS服务器。它们都是请求主要发生的地点,请求频率较其它的节点要高,而且处于请求序列的关键路径之上。如果它们效率无法提高的话,对于整个软件的效率有致命的影响。而且在这些节点上一般都会发生较大规模的数据交换,有时其中还包含有业务逻辑处理,它们正是在进行压力测试时首先需要考虑的。本文以这三种节点为例,介绍如何使用JMeter来完成针对于它们的压力测试。Web服务器对于大多数的项目来说,并不会自行开发一个Web服务器,因此Web服务器压力测试的对象实际就

6、是-发布到Web服务器中的软件。最简单的Web测试计划只需要三个JMeter的测试元件,如下图:?測试计划HTTP谶求0用表格寧看结果其中:在线程组中定义线程数、产生线程发生的时间和测试循环次数。在http请求中定义服务器、端口、协议和方法、请求路径等。表格监听器负责收集和显示结果。这种设置对于包含了安全机制的web应用是不够的,典型的web应用一般都会:1.有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到session中。2.有一个filter,它拦截请求,检查每个请求相关的session中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提

7、供安全信息。在这种配置下应用上面的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。为了成功的测试,至少有2种方法:方法一,去掉程序的安全设置,如filter,使得不需要用户安全信息也能访问受限内容;方法二,不修改程序,使用JMeter提供的HttpURL重写修饰符或HttpCookie管理器。对于第一种方法,有其局限性:需要修改程序配置,如去掉web.xml中关于安全filter的设置。需要维护多个版本的web.xml

8、,如压力测试和功能测试分别各自的web.xml,增加了维护成本,而且有可能会在测试之后忘记将web.xml修改回来。对于一些需要用户安全信息的页面无能为力,如某些业务审计操作需要用户安全信息来记录。因为缺少这样的信息,注定了测试的失败。如果解决为了这个问题进一步的修改程序,那么因为存在多个版本的程序,那么其维护难度将大大增加。虽然,第二种方法配置难度增加了,但是它不用修改程序。而且还可将测试计划保存成文件,以便重复使用。因此,选用第二种方法是较为理想的做法。下面以一个简化的例子说明使用方法二的配置步骤。1.例子由以下几个文件组成:AuthorizenFilter.java,过滤器负责检验ses

9、sion中是否存在用户信息。如果没有,那么就转向到login.jsp。它的主要方法doFilter内容如下:publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletExceptionHttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getS

10、ession();Useruser=(User)session.getAttribute(user);if(null=user)Stringuri=req.getRequestURI();/如果请求页是登录页,不转向if(uri.equalsIgnoreCase(/gWeb/login.jsp)chain.doFilter(request,response);elseres.sendRedirect(/gWeb/login.jsp);elsechain.doFilter(request,response);User.java,用户类负责记录用户的信息。为了简化,这里的登录操作只允许指定用户名和

11、密码。主要内容如下:publicclassUserprivateStringuser;privateStringpwd;publicUser(Stringuser,Stringpwd)this.user=user;this.pwd=pwd;publicbooleanlogin()returnuser.equals(foxgem)&pwd.equals(12345678);publicStringgetUser()returnuser;publicvoidsetUser(Stringuser)this.user=user;Login.jsp和welcome.jsp。其中login.jsp负责生成

12、User对象,并调用User的login。当login返回为true时转向到welcome.jsp。其验证部分的代码:web.xml,配置filter拦截所有访问JSP页面的请求:authorizenorg.foxgem.jmeter.AuthorizenFilterauthorizen*.jsp2.创建如下结构的Web测试计划:T=测试计划申HTTP请求晌应断言HTTP请求駄认値申老循坏授制黔中HTTP谪求响虑断言画用表格察看结果HTTPCookie管理貉其中主要测试元件说明如下:http请求默认值负责记录请求的默认值,如服务器、协议、端口等。第一个http请求,请求login.jsp,并附

13、加验证所需要的参数(user=foxgem,pwd=12345678,Submit=Submit);其包含的响应断言验证url中包含welcome.jsp,这一点可以从程序中反应。第二个http请求,请求是welcome.jsp;其包含的响应断言验证响应文本中包含foxgem,它是welcome.jsp页面逻辑的一部分。httpcookie管理器负责管理整个测试过程中使用的cookie,它不需要设置任何属性。循环控制器设置发送第二个请求的循环次数,表格监听器负责收集和显示第二个请求的测试结果。启动测试计划之后,执行的顺序是:首先,第一个请求登录页进行登录;成功登录之后,使用循环控制器执行第二个

14、请求。请求welcome.jsp时,响应断言用来验证是否确实是welocme.jsp来处理请求,而不是因为其它页。在这个测试计划中需要注意的是httpcookie管理器。正是由于它的作用,使得第二个请求能顺利的发送到welcome.jsp进行处理,而不是因为缺少用户安全信息转发到login.jsp。在这个例子中,我们并没有在程序中使用cookie(使用的是session),那么httpcookie管理器怎么会起作用呢?这是因为在servlet/jsp规范中对于session的状态跟踪有2种方式:使用cookie,保留和传递sessionid。它不要求程序对于url有什么特殊的处理,但是要求浏览器允许cookie。在这个例子中,就是这

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号