JMeter基础入门

1. 安装JMeter

  1. 安装JDK 1.4以上版本。
  2. 设置环境变量:
  1. 在用户变量中,新建变量名“JAVA_HOME”,变量值为:安装JDK的目录,如我的为:“C:\Program Files\Java\jdk1.5.0;”
  2. 再新建变量名为“CLASSPATH”,变量值为:

“%JAVA_HOME%\lib\dt.jar; %JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\bin;” 。    

  1. 在系统变量的“Path”变量值后加上:“%JAVA_HOME%\bin;”。
  1. 安装Jmeter,解压“jakarta-jmeter-2.3.2.zip”到E盘根目录下:“E:\jakarta-jmeter-2.3.2”。
  2. 设置环境变量:
  1. 在用户变量中,新建变量名“JMETER_HOME”,变量值为:“E:\jakarta-jmeter-2.3.2;”。
  2. 修改“CLASSPATH”,添加:“%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar;”。
  1. 运行jmeter: 直接打开 E:\jakarta-jmeter-2.3.2\bin\jmeter.bat 即可。

2. JMeter 的主要测试组件总结如下:

1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。

4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8. 定时器负责定义请求之间的延迟间隔。

3. 常用测试

本文以这三种节点为例,介绍如何使用 JMeter 来完成针对于它们的压力测试。

3.1 Web 服务器

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

其中:

  • 在线程组中定义线程数、产生线程发生的时间和测试循环次数。
  • 在http请求中定义服务器、端口、协议和方法、请求路径等。
  • 表格监听器负责收集和显示结果。

这种设置对于包含了安全机制的 web 应用是不够的,典型的 web 应用一般都会:

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

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

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

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

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

对于第一种方法,有其局限性:

  • 需要修改程序配置,如去掉web.x中关于安全filter的设置。需要维护多个版本的web.x,如压力测试和功能测试分别各自的web.x,增加了维护成本,而且有可能会在测试之后忘记将web.x修改回来。
  • 对于一些需要用户安全信息的页面无能为力,如某些业务审计操作需要用户安全信息来记录。因为缺少这样的信息,注定了测试的失败。如果解决为了这个问题进一步的修改程序,那么因为存在多个版本的程序,那么其维护难度将大大增加。

虽然,第二种方法配置难度增加了,但是它不用修改程序。而且还可将测试计划保存成文件,以便重复使用。因此,选用第二种方法是较为理想的做法。下面以一个简化的例子说明使用方法二的配置步骤。

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.x,配置 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测试计划:

        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值