• Jmeter01:自定义java取样器


    一、背景

      使用在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以及libext下的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. 执行结果

  • 相关阅读:
    MySQL中tinytext、text、mediumtext和longtext详解
    端口冲突
    Form绑定
    Uri绑定
    只绑定Get参数
    Linux:Day4(上) 文件管理、管道
    selenium之frame
    selenium之选项卡管理
    Request
    爬虫常用库
  • 原文地址:https://www.cnblogs.com/gupan/p/8463336.html
Copyright © 2020-2023  润新知