美文网首页
Jmeter Function解读

Jmeter Function解读

作者: 测试随笔 | 来源:发表于2017-09-16 10:56 被阅读0次

    Jmeter 函数助手提供了一系列功能,比如csv参数文件读取、Md5加密等等,工作上可能会遇到其他jmeter尚未实现的功能,为了更简便的完成工作,可以选择扩展Jmeter

    函数助手

    org.apache.jmeter.functions 是jmeter扩展功能包,所有扩展需位于此包中

    image.png

    Jmeter扩展AbstractFunction类

    抽象类AbstractFunction包括四个抽象方法,需要在类中分别实现

    //参数值设置,根据定义的参数名称获取对应的参数值,保存在JMeterUtils全局变量中
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException;
    //函数名称,比如_CSVRead
    public String getReferenceKey();
    /*根据两个入参,获取扩展函数的<String>类型结果值。
    SampleResult 上一个Sampler的结果,Sampler当前运行Sampler。*/
    public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException;
    //函数助手界面显示函数定义
    public List<String> getArgumentDesc()
    

    基于源码解读

    通过_Random功能源码分析具体实现

    _Random
    
    
    package org.apache.jmeter.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;
    
    /**
     * Provides a Random function which returns a random long integer between a min
     * (first argument) and a max (second argument).
     * @since 1.9
     */
    public class Random extends AbstractFunction {
    
        private static final List<String> desc = new LinkedList<>();
        //定义函数名称
        private static final String KEY = "__Random"; //$NON-NLS-1$
       //初始化代码块定义函数名称
        static {
            desc.add(JMeterUtils.getResString("minimum_param")); //$NON-NLS-1$
            desc.add(JMeterUtils.getResString("maximum_param")); //$NON-NLS-1$
            desc.add(JMeterUtils.getResString("function_name_paropt")); //$NON-NLS-1$
        }
        //定义CompoundVariable 变量
        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);
          /**
         结果保存到JMeterVariables 并发线程组参数中,可以函数名称的方式调用
         */
            if (varName != null) {
    
                JMeterVariables vars = getVariables();
                final String varTrim = varName.execute().trim();
                if (vars != null && varTrim.length() > 0){// vars will be null on TestPlan
                  //put方法,key/value类型,可使用${varTrim}方式获取randString值
                    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;
        }
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:Jmeter Function解读

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