美文网首页
扩展jmeter函数

扩展jmeter函数

作者: 递归思念 | 来源:发表于2017-07-29 13:53 被阅读0次

    一,什么是jmeter函数

    jmeter函数

    二,准备工作

    需要一些java基础及java开发环境(推荐IDEA)

    三,实施阶段

    以jemeter自带的Random函数为例:

    1.编写待导入的函数
    
    package org.apache.jmeter.functions;//包名必须以functions结尾
    
    import java.util.Collection;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.concurrent.ThreadLocalRandom;
    
    import org.apache.jmeter.engine.util.CompoundVariable;
    import org.apache.jmeter.samplers.SampleResult;
    import org.apache.jmeter.samplers.Sampler;
    import org.apache.jmeter.threads.JMeterVariables;
    import org.apache.jmeter.util.JMeterUtils;
    
    
    public class Random extends AbstractFunction {//创建自己的函数类,继承AbstractFunction类
    
        private static final List<String> desc = new LinkedList<>();
        private static final String KEY = "__Random"; //函数名
    
        static {
            desc.add(JMeterUtils.getResString("minimum_param")); //参数1说明
            desc.add(JMeterUtils.getResString("maximum_param")); //参数2说明
            desc.add(JMeterUtils.getResString("function_name_paropt")); //参数3说明
        }
    
        private CompoundVariable varName; //参数
        private CompoundVariable minimum;//参数
        private CompoundVariable maximum;//参数
    
        /**
         * No-arg constructor.
         */
        public Random() {
        }
    
        /** {@inheritDoc} */
        @Override
        public String execute(SampleResult previousResult, Sampler currentSampler)
                throws InvalidVariableException {//函数实现
    
    
            long min = Long.parseLong(minimum.execute().trim());
            long max = Long.parseLong(maximum.execute().trim());
    
            long rand = ThreadLocalRandom.current().nextLong(min, max+1);
    
            String randString = Long.toString(rand);
    
            if (varName != null) {
                JMeterVariables vars = getVariables();
                final String varTrim = varName.execute().trim();
                if (vars != null && varTrim.length() > 0){// vars will be null on TestPlan
                    vars.put(varTrim, randString);
                }
            }
    
            return randString;
    
        }
    
        /** {@inheritDoc} */
        @Override
        public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {//函数参数处理
            checkParameterCount(parameters, 2, 3);
            Object[] values = parameters.toArray();
    
            minimum = (CompoundVariable) values[0];
            maximum = (CompoundVariable) values[1];
            if (values.length>2){
                varName = (CompoundVariable) values[2];
            } else {
                varName = null;
            }
    
        }
    
        /** {@inheritDoc} */
        @Override
        public String getReferenceKey() {
            return KEY;//设置函数名
        }
    
        /** {@inheritDoc} */
        @Override
        public List<String> getArgumentDesc() {
            return desc;//设置参数描述
        }
    
    }
    
    

    基本可以看出只需要编写execute这个方法,其他都是套路。

    2,打包写好的类,将jar包和依赖拷贝到jmeter路径下lib\ext目录,重启jmeter即可。

    相关文章

      网友评论

          本文标题:扩展jmeter函数

          本文链接:https://www.haomeiwen.com/subject/jfnqlxtx.html