• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-6-27 17:42 | 作者: webmaster | 来源: 本站原创 | 查看: 254次 | 进入软件测试论坛讨论

领测软件测试网

Web 服务器

对于大多数的项目来说,并不会自行开发一个Web服务器,因此Web服务器压力测试的对象实际就是--发布到Web服务器中的软件。最简单的Web测试计划只需要三个 JMeter 的测试元件,如下图:


 

其中:

在线程组中定义线程数、产生线程发生的时间和测试循环次数。
在http请求中定义服务器、端口、协议和方法、请求路径等。
表格监听器负责收集和显示结果。
这种设置对于包含了安全机制的 web 应用是不够的,典型的 web 应用一般都会:

1. 有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到 session 中。

2. 有一个 filter,它拦截请求,检查每个请求相关的 session 中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。

在这种配置下应用上面的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。

为了成功的测试,至少有2种方法:

方法一,去掉程序的安全设置,如filter,使得不需要用户安全信息也能访问受限内容;
方法二,不修改程序,使用JMeter提供的"Http URL重写修饰符"或"Http Cookie管理器"。
对于第一种方法,有其局限性:

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

1. 例子由以下几个文件组成:

AuthorizenFilter.java,过滤器负责检验session中是否存在用户信息。如果没有,那么就转向到 login.jsp。它的主要方法 doFilter 内容如下:

public void doFilter(ServletRequest request,
                ServletResponse response,
                FilterChain chain)
                throws IOException, ServletException {
                HttpServletRequest req = (HttpServletRequest)request;
                HttpServletResponse res = (HttpServletResponse)response;
                HttpSession session= req.getSession();
                User user = (User)session.getAttribute("user");
                if(null == user){
                String uri= req.getRequestURI();
                //如果请求页是登录页,不转向
                if( uri.equalsIgnoreCase("/gWeb/login.jsp")){
                chain.doFilter(request, response);
                } else{
                res.sendRedirect("/gWeb/login.jsp");
                }
                }else{
                chain.doFilter(request, response);
                }
                }
               
 


User.java,用户类负责记录用户的信息。为了简化,这里的登录操作只允许指定用户名和密码。主要内容如下:

public class User {
                private String user;
                private String pwd;
                public User(String user, String pwd) {
                this.user = user;
                this.pwd = pwd;
                }
                public boolean login(){
                return user.equals("foxgem") && pwd.equals("12345678");
                }
                public String getUser() {
                return user;
                }
                public void setUser(String user) {
                this.user = user;
                }
                }
               
 


Login.jsp 和welcome.jsp。其中 login.jsp 负责生成 User 对象,并调用 User 的login。当 login 返回为 true 时转向到 welcome.jsp。其验证部分的代码:

<%
                if( request.getParameter("Submit") != null) {
                User ur= new User( request.getParameter("user"), request.getParameter("pwd"));
                if( ur.login()){
                session.setAttribute("user", ur);
                response.sendRedirect("/gWeb/welcome.jsp");
                } else{
                session.setAttribute( "LOGIN_ERROR_MSG",
                "无效的用户,可能原因:用户不存在或被禁用。");
                response.sendRedirect("/gWeb/index.jsp");
                return;
                }
                }
                %>
               
 


web.xml,配置 filter 拦截所有访问 JSP 页面的请求:

<filter>
                <filter-name>authorizen</filter-name>
                <filter-class>org.foxgem.jmeter.AuthorizenFilter</filter-class>
                </filter>
                <filter-mapping>
                <filter-name>authorizen</filter-name>
                <url-pattern>*.jsp</url-pattern>
                </filter-mapping>
               

2. 创建如下结构的Web测试计划

其中主要测试元件说明如下:

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

42/4<1234>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网