jmeter添加自定义扩展函数之DoubleSum

1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这里就不再赘述

2,代码如下:

package com.mytest.functions;
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.threads.JMeterVariables;

import java.util.Collection;

import java.util.LinkedList;

import java.util.List;



/**

 * Provides a DoubleSum function that adds two or more Double values.

 * Mostly copied from LongSum

 */

public class DoubleSum extends AbstractFunction {



    private static final List<String> desc = new LinkedList<String>();

    private static final String KEY = "__doubleSum";



    static {

        desc.add("First double to add");

        desc.add("Second long to add - further doubles can be summed by adding further arguments");

        desc.add("Name of variable in which to store the result (optional),The author is guanyf");

    }



    private Object[] values;



    /**

     * No-arg constructor.

     */

    public DoubleSum() {

    }



    /**

     * {@inheritDoc}

     */

    @Override

    public synchronized String execute(SampleResult previousResult, Sampler currentSampler)

            throws InvalidVariableException {



        JMeterVariables vars = getVariables();



        Double sum = 0D;

        String varName = ((CompoundVariable) values[values.length - 1]).execute().trim();



        for (int i = 0; i < values.length - 1; i++) {

            sum += Double.parseDouble(((CompoundVariable) values[i]).execute());

        }



        try {

            sum += Double.parseDouble(varName);

            varName = null; // there is no variable name

        } catch (NumberFormatException ignored) {

        }



        String totalString = Double.toString(sum);

        if (vars != null && varName != null && varName.length() > 0) {// vars will be null on TestPlan

            vars.put(varName, totalString);

        }



        return totalString;



    }



    /**

     * {@inheritDoc}

     */

    @Override

    public synchronized void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {

        checkMinParameterCount(parameters, 2);

        values = parameters.toArray();

    }



    /**

     * {@inheritDoc}

     */

    @Override

    public String getReferenceKey() {

        return KEY;

    }



    /**

     * {@inheritDoc}

     */

    @Override

    public List<String> getArgumentDesc() {

        return desc;

    }

}
View Code
原文地址:https://www.cnblogs.com/guanyf/p/10912419.html