Jmeter函数组件开发

插件开发方法有两种:

一、在jmeter官网下载jmeter源码,在源码里面新加函数,然后导出jar;

二、不下载源码,直接导入jmeter相应的jar包,即可开发。(推荐)

  下面介绍第二种开发方法:

在eclipse新建项目,导入jmeter目录下\lib\ext目录中的的ApacheJMeter_core.jar,继承AbstractFunction类。

案例:以下写一个计算阶乘的Function,将其命名为Factorial,主要代码参考如下,

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;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

public class Factorial extends AbstractFunction {

    private static final Logger log = LoggingManager.getLoggerForClass();
    private static final List<String> desc = new LinkedList<String>();
    private static final String KEY = "__factorial";
    private Object[] values = null;

    static {
        desc.add("factorial_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;
        }

        return String.valueOf(factorial(num));
    }
    //获取函数引用关键字
    @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();
    }

    private int factorial(int num){
        int result = 1;
        if(num < 0){
            return -1;
        }
        if(num == 0){
            result = 1;
        } else {
            for(int i = num; i > 0; i--){
                result *= i;
            }
        }

        return result;
    }
}

通过继承AbstractFunction抽象类,重写getArgumentDesc方法实现对函数参数的描述,重写setParameters方法来对函数的参数进行检查和设置,重写getReferenceKey方法告诉JMeter该函数在框架中的引用名称,重写execute方法,实现对该函数的执行并返回结果。通过上述代码我们完成了对Factorial函数组件的编写。  将代码导出为jar文件,放在\lib\ext目录中,打开jmeter即可在函数助手中查看到该函数组件: 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小古哥的博客园

JavaScript闭包的深入理解

闭包算是javascript中一个比较难理解的概念,想要深入理解闭包的原理,首先需要搞清楚其他几个概念: 一、栈内存和堆内存 学过C/C++的同学可能知道,计算...

3847
来自专栏老马说编程

(66) 理解synchronized / 计算机程序的思维逻辑

上节我们提到了多线程共享内存的两个问题,一个是竞态条件,另一个是内存可见性,我们提到,解决这两个问题的一个方案是使用synchronized关键字,本节就来讨论...

2685
来自专栏C/C++基础

Google C++编程风格指南(二)之函数的相关规范

定义:内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。

942
来自专栏微信公众号:Java团长

Java堆和栈的区别

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作...

2223
来自专栏轮子工厂

5. 很“迷”的字符与字符串

最近一直在为自己的浏览量而担忧啦,都快被厂长大人约谈了……我真的有尽力在写稿子哦,所以也请各位老铁,如果觉得我的文章还不错就转发到朋友圈或者微信群之类的,让更多...

1192
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day01-基础题

1. 简述java语言,具有哪些特性? (1).java语言是简单的 java语言是和c++语言类似的,其次java中丢弃了c++中一些难理解的特性,比如运算符...

2834
来自专栏技术总结

iOS不可错过的关键字

建议查看原文:https://www.jianshu.com/p/dce05b24d288(不定时更新)

853
来自专栏Pythonista

python中的函数

初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变...

1434
来自专栏Java爬坑系列

【Java入门提高篇】Day11 Java代理——JDK动态代理

  今天来看看Java的另一种代理方式——JDK动态代理   我们之前所介绍的代理方式叫静态代理,也就是静态的生成代理对象,而动态代理则是在运行时创建代理对象。...

2087
来自专栏Java爬坑系列

你不可不知的Java引用类型之——Reference源码解析

reference指代引用对象本身,referent指代reference引用的对象,下文介绍会以reference,referent形式出现。

1031

扫码关注云+社区

领取腾讯云代金券