滚滚向前滚

导航

 

一、背景

  使用在Jmeter中,有自己的Java取样器供我们使用,但是,如果需要在我们的Java采样器引用自己的类,那么定制自己的JAVA采样器是一个不错的选择。当然我们同样也可以重写HTTP取样器的方法,这里以自定义java取样器来举例

二、步骤

1. 将需要的包添加进你java项目的build path中

  需要添加进build path中的jar包为以下三个

ApacheJMeter_components.jar
ApacheJMeter_core.jar
ApacheJMeter_java.jar

  但是,由于担心存在jar包的依赖问题,所以建议导入所有的Jmeter安装目录\lib以及\lib\ext\下的jar文件,导包步骤如下

 

2. 编写自定义Java取样器代码

  在编写自定义Java取样器代码之前,我自定义了一个Hello类,实现简单的特定字符串打印,代码如下

package com.SelfDefined.Components;

public class Hello {
	public String sayHello(){
		return "Hello";
	}
	
	public String sayHello2Person(String name){
		if (name == null || name.equals("")) {
			name = "nobody";
		}
		return (new StringBuilder()).append("Hello").append(name).toString();
	}
	
	public int sum(int a, int b) {
		return a + b;
	}
}

  自定义Java取样器代码详解:

  自定义java取样器,需要用到Arguments、AbstractJavaSamplerClient、JavaSamplerContext、SampleResult这四个类,也需要重写public Arguments getDefaultParameters(){}、public void setupTest(JavaSamplerContext arg0){}、public SampleResult runTest(JavaSamplerContext arg0){}、public void teardownTest(JavaSamplerContext arg0){}这些方法这些方法的作用如下:

2.1 public Arguments getDefaultParameters(){}

  定义需要输入的变量及其默认值

2.2 public void setupTest(JavaSamplerContext arg0){}

  定义在指定测试前所需做的工作,可以为空

2.3 public SampleResult runTest(JavaSamplerContext arg0){}

  执行测试时需要执行的函数

2.4 public void teardownTest(JavaSamplerContext arg0){}

  测试执行完毕后的资源清理工作

2.5 public static void main(String[] args ) {}

  主函数:运行时按照主函数定义的逻辑来执行测试用例

自定义Java取样器代码

package com.SelfDefined.Components;

import java.security.Policy.Parameters;

import org.apache.jmeter.config.Arguments;//这个类是用来定义和访问参数的
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;//自定义Java取样器需要继承这个类
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;//Jmeter的上下文
import org.apache.jmeter.samplers.SampleResult;//返回结果


//需要自定义Java取样器时继承AbstractJavaSamplerClient类,如果需要重写HTTP取样器,则继承其他的类
public class MyComponents extends AbstractJavaSamplerClient{
    private String a;
    private String b;
    
    private String resultData;
    
    //这个方法用来定义java方法的入参
    //param.addArgument("num1", "");表示入参参数名为num1,默认值为空
    
    //设置可用参数及默认值
    public Arguments getDefaultParameters() {
        Arguments param = new Arguments();
        param.addArgument("num1", "");
        param.addArgument("num2", "");
        return param;
    }
    
    // 每个线程测试前执行一次,做一些初始化工作
    public void setupTest(JavaSamplerContext arg0) {
        
    }
    
    //开始测试,从arg0参数可以获得参数值
    public SampleResult runTest(JavaSamplerContext arg0) {
        a = arg0.getParameter("num1");
        b = arg0.getParameter("num2");
        
        SampleResult sr = new SampleResult();
        sr.setSampleLabel("Java请求");
        try {
            sr.sampleStart();
            Hello test = new Hello();
            resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b)));
            if (resultData != null && resultData.length() > 0) {
                sr.setResponseData("结果是:" + resultData, null);
                sr.setDataType(SampleResult.TEXT);
            }
            sr.setSuccessful(true);//如果参数正确,设置返回结果为真
        } catch (Throwable e) {
            sr.setSuccessful(false);//如果参数错误,设置返回结果为假
            e.printStackTrace();
        } finally {
            sr.sampleEnd();//Jmeter结束统计响应时间标记
        }
        
        
        return sr;
    }
    
    public void teardownTest(JavaSamplerContext arg0) {
        
    }
    
    public static void main(String[] args ) {
        Arguments params = new Arguments();
        params.addArgument("num1", "1");//获取变量num1的值,若为空取默认值1,我试了一下没啥用
        params.addArgument("num2", "2");
        JavaSamplerContext arg0 = new JavaSamplerContext(params);//创建Jmeter上下文
        MyComponents test = new MyComponents();
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);
    }
    
}

3. 导出jar包

  导包会有一个warning,不用管它

4. 重启Jmeter即可在Java取样器中看到我们定制的组件

 

5. 执行结果

 

posted on 2018-02-23 20:09  滚滚向前滚  阅读(403)  评论(0编辑  收藏  举报