首页 > 其他分享 >jmeter 自定义函数和Sampler(采集器)

jmeter 自定义函数和Sampler(采集器)

时间:2023-05-31 23:06:10浏览次数:41  
标签:自定义 apache 采集器 org Override import jmeter public

第一个插件自定义函数(Function)

代码具体如下,生成 jar 放到 lib\ext 目录下即可。

/*代码路径中,一定要放在 functions 目录中,否则 jmeter 会识别自定义函数失败*/

package interfacePerformance.functions;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
public class double2 extends AbstractFunction {
// private static final Logger log = LoggingManager.getLoggerForClass();
private static final List<String> desc = new LinkedList<String>();
/* KEY 要和类名一致,否则无法识别自定义函数 */
private static final String KEY = "__double2";
private Object[] values = null;
static {
desc.add("double2_value");
} 
//描述参数
@Override
public List<String> getArgumentDesc() {
// TODO Auto-generated method stub
return desc;
} 
//函数执行,返回结果
@Override
public String execute(SampleResult previousResult, Sampler currentSampler) throws
InvalidVariableException {
// TODO Auto-generated method stub
String numberString = ((CompoundVariable) values[0]).execute().trim();
int num;
try {num = Integer.valueOf(numberString);
} catch (Exception e) {
return null;
} 
/* 默认返回 String 类型 */
/* num*2 为业务代码 */
return String.valueOf(num * 2);
} 
//获取函数引用关键字
@Override
public String getReferenceKey() {
// TODO Auto-generated method stub
return KEY;
} 
//设置参数
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws
InvalidVariableException {
// TODO Auto-generated method stub
// 可以检查参数数量,主要包括以下两种方法
checkMinParameterCount(parameters, 1);
checkParameterCount(parameters, 1, 1);
values = parameters.toArray();
}
}

 

 



第二个插件采集器(Sampler)

TestSampler.java

import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;

/**
 * @author nikey
 * @date 2020/3/30
 */
public class TestSampler extends AbstractSampler {
    public final static String FUNCTION = "function";

    @Override
    public SampleResult sample(Entry entry) {
        SampleResult result = new SampleResult();
        result.sampleStart();
        // 输出GUI界面所输入的函数方法返回结果
        System.out.println(this.getProperty(FUNCTION));
        result.sampleEnd();
        result.setSuccessful(true);
        return result;
    }
}

TestSamplerGUI.java

import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;

import javax.swing.*;
import java.awt.*;

/**
 * @author nikey
 * @date 2020/3/30
 */
public class TestSamplerGUI extends AbstractSamplerGui {
    private JTextField functionTextField = null;
    public TestSamplerGUI(){
        init();
    }

    @Override
    public void configure(TestElement element) {
        super.configure(element);
        functionTextField.setText(element.getPropertyAsString(TestSampler.FUNCTION));
    }

    private void init() {
        JPanel mainPanel = new JPanel(new GridBagLayout());
        functionTextField = new JTextField(20);
        mainPanel.add(functionTextField);
        add(mainPanel);
    }

    @Override
    public TestElement createTestElement() {
        // 创建所对应的Sampler
        TestElement sampler = new TestSampler();
        modifyTestElement(sampler);
        return sampler;
    }

    @Override
    public String getLabelResource() {
        return this.getClass().getSimpleName();
    }

    @Override
    public void modifyTestElement(TestElement sampler) {
        super.configureTestElement(sampler);
        if(sampler instanceof TestSampler){
            TestSampler testSampler = (TestSampler) sampler;
            testSampler.setProperty(TestSampler.FUNCTION,functionTextField.getText());
        }
    }

    @Override
    public String getStaticLabel() {
        // 设置显示名称
        return "TestSampler";
    }

    private void initFields(){
        functionTextField.setText("");
    }

    @Override
    public void clearGui() {
        super.clearGui();
        initFields();
    }
}

 

 

标签:自定义,apache,采集器,org,Override,import,jmeter,public
From: https://blog.51cto.com/lenglingx/6390782

相关文章

  • SoapUI、Jmeter、Postman三种接口测试工具的比较
    1. 用例组织方式首先是用例组织方式的不同,不同的目录结构与组织方式代表不同工具的测试思想,学习一个测试工具应该首先了解其组织方式。SoapUI的组织方式如下图,最上层是WorkSpace,每个窗口只可以打开一个WorkSpace(这是一个xml文件),每个Project也是一个单独的xml文件(为了协同工作,......
  • Arrays:自定义排序规则的方式二
          ......
  • Arrays类:自定义排序规则的方式一
         ......
  • 基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试
    博主写的非常好https://www.cnblogs.com/tdp0108/p/17446834.html#top前言   搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jenkins这种持续构建工具基本都在向上兼容JAVA的......
  • 基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试
     前言   搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jenkins这种持续构建工具基本都在向上兼容JAVA的环境,以前的JAVA8或者以下版本可能在运行jenkins等时可能会有异常导致......
  • Pycharm自定义代码片段
    编写自定义代码片段可以避免编写很多重复的东西;下文以PyCharm2023.1.2为例(已安装Chinese插件);打开设置,参考下图1,2,3,4,5顺序点击菜单;看到如下页面;输入编写,描述,模板文本;点击定义按钮,会显示一个弹窗,选择语言环境,点击除内容区的空白处关闭并保......
  • mysql自定义变量
    1.自定义变量语法:set@变量名:=值;(冒号可以不加)或者select@变量名:=值;(冒号必须加);使用方法:select@变量名;2.基础知识(用了变量后就是先排序):mysql语句的执行顺序:正常是先查询后排序,但是如果使用了变量,就是先排序后查询1)先查询后排序:selectgender,first_nameasname,age......
  • Gorm - 使用gorm时进行执行自定义SQL的几种方式
    1、当只需要执行某个SQL而不需要进行获取返回值时//如果其中有变量,则使用?进行占位,sql:="要执行的SQL"//在Exec方法中在sql后面可以使用多个参数作为占位的补充//例如需要name=?,则写法可以使用util.Db.Exec(sql,"张三").Errorerr:=util.Db.Exec......
  • 手机直播源码,android 轮播图(自定义组合控件)
    手机直播源码,android轮播图(自定义组合控件)1.项目gradle添加一下配置:  allprojects{ repositories{ ... maven{url'https://jitpack.io'} } } ​2.module中的gradle添加依赖:  dependencies{   implementation'com.github.truemi:SlideS......
  • 视频直播系统源码,Android 自定义底部导航栏
    视频直播系统源码,Android自定义底部导航栏添加依赖1.项目gradle添加一下配置:  allprojects{ repositories{ ... maven{url'https://jitpack.io'} } }   ​2.module中的gradle添加依赖:  dependencies{   implementation'com.github.tr......