html tool

2015年6月9日星期二

jmeter中添加java请求

参考:http://www.cnblogs.com/yuki-lau/archive/2013/04/20/3033010.html
---------------------------------------
[popexizhi]
编辑“Java请求”属性。下图这个大家可以发现已经有了Launcher类,和userName、password、authUrl的值了,这是因为:
1. 我之前写了满足一定要求的代码,打了jar包,放入了JMeter的lib/ext文件夹下了,所以可以看到Launcher;
2. 我在Launcher类中的getDefaultParameters方法中添加了默认的userName、password、authUrl值

---------------------------------------------
 实现“Java请求”代码
针对"Java请求"类型的测试,需要基于JMeter测试框架编写测试用例。
1)新建一个普通的Java工程
2)添加JMeter的包引用,这些包位于 JMeter安装目录/lib/ext下,一般只需要ApacheJMeter_core.jar和ApacheJMeter_java.jar这两个。
3)新建一个Java Class,如下例中的“Launcher”,并继承“AbstractJavaSamplerClient”。AbstractJavaSamplerClient中默认实现了四个可以覆盖的方法,分别是“getDefaultParameters”,“setupTest”,“runTest”和“teardownTest”方法。

  • getDefaultParameters 方法主要用于设置传入界面的参数;
  • setupTest方法为初始化方法,用于初始化性能测试时的每个线程;
  • runTest方法为性能测试时的线程运行体;
  • teardownTest方法为测试结束方法,用于结束性能测试中的每个线程。
package cn.edu.zju.swift.test;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

import cn.edu.zju.swift.JtangSwiftClient; //被测试的类内容
import cn.edu.zju.swift.model.result.AccountResult; //被测试的类内容

public class Launcher extends AbstractJavaSamplerClient{
    
    private JtangSwiftClient client;
    
    @Override
    /**
     * JMeter界面中展示出此方法所设置的默认参数。
     * @return
     */
    public Arguments getDefaultParameters() {
        
        Arguments args = new Arguments();
        
        args.addArgument("authUrl", "http://192.168.3.51:8080/auth/v1.0");
        args.addArgument("userName", "test:tester");
        args.addArgument("password", "testing");
                
        return args;
    }

    /** 
     * 执行runTest()方法前会调用此方法,可放一些初始化代码 
     */ 
    @Override
    public void setupTest(JavaSamplerContext context) {
        
        // 创建SwiftClient
        this.client = new JtangSwiftClient(15000, 15000, 8192, true, false);
    }

    /** 
     * 执行runTest()方法后会调用此方法,可放一些资源释放代码
     */ 
    @Override
    public void teardownTest(JavaSamplerContext context) {
        
        // 关闭连接
        this.client.close();
    }

    @Override
    /**
     * 性能测试时的线程运行体,执行的业务方法放在这里。
     */
    public SampleResult runTest(JavaSamplerContext context) {
        
        // 创建SampleResult对象,用于记录执行结果的状态,并返回
        SampleResult sampleResult = new SampleResult();

        
        // 获取JMeter中输入的用户参数
        String authUrl = context.getParameter("authUrl");
        String userName = context.getParameter("userName");
        String password = context.getParameter("password");
        
        // 开始
        sampleResult.sampleStart();
        
        AccountResult accountResult = client.auth(authUrl, userName, password);

        // 暂停
        // sampleResult.samplePause();
        
        // 重启
        // sampleResult.sampleResume();
        
        // 结束
        sampleResult.sampleEnd();
        
        sampleResult.setSuccessful(accountResult.isSuccess());
        
        // 返回
        return sampleResult;
    }
}
4)代码编写完毕后,把上面的例子打包(使用eclipse右键项目 -> export -> jar,即可)。然后把生成的"swift-random-action-test.jar"文件拷贝到JMeter的安装目录lib\ext下,就可以在上述“2. 使用JMeter创建测试计划”的4)Java请求编辑页面的下拉列表中看到Launcher类了。

这里有两点需要注意
1. 如果你的jar依赖了其他第三方jar,需要将其一起放到lib/ext下,否则会出现ClassNotFound错误,这个问题也是困扰了我好久的 T^T;
2. 如果在将jar放入lib/ext后,你还是无法找到你编写的类,且此时你是开着JMeter的,则需要重启一下JMeter。

没有评论:

发表评论