Jmeter二次开发实践-Jmeter插件开发

12 篇文章 2 订阅

        关于Jmeter插件的二次开发,其实之前有提到过,当我们需要用Jmeter来发送Java请求,就需要我们自己写程序实现功能,然后放入Jmeter中进行测试。

        详情可以看之前的文章:Jmeter发送Java请求_社会小刚哥的博客-CSDN博客

        本篇主要讲解如何开发一个函数助手的插件,使用工具Eclipse,所需jar包ApacheJmeter_core.jar,ApacheJmeter_java.jar。

        根据项目所需生成随机的车牌号,我们首先看一下Java代码怎么实现:

         代码贴出来,方便大家练手:

public class CarId {

	public static void main(String[] args) {

		char[] license = new char[5];
		int i = 0;
		int k = 0;
		int n = 0;
		for (; i < 5; i++) {
			if (Math.random() > 0.5) {
				if (k < 3) {
					license[i] = (char) ('A' + Math.random() * 26);
					k++;
				} else {
					license[i] = (char) ('0' + Math.random() * 10);
					n++;
				}
			} else {
				if (n < 4) {
					license[i] = (char) ('0' + Math.random() * 10);
					n++;
				} else {
					license[i] = (char) ('A' + Math.random() * 26);
					k++;
				}
			}
		}
		String licenses = String.valueOf(license);
		String pro = "京";
		String city = "A";
		String carId = pro+city+licenses;
		System.out.println(carId);

	}
}

        主要方法的实现有了,来看看怎么做插件,新建的包名称必须是org.apache.jmeter.functions,在包下新建class名为CarId。

         建好的class需要去继承AbstractFunction类,并重写其中的方法。

         首先确定在函数助手中的展示名称,以及所需的函数参数,具体实现如下:

         真正的实现代码在Execute方法,代码的逻辑不变。

         如果存储结果的变量名定义了,还需要把最终结果放入:

        所有代码贴上,仅供参考:

package org.apache.jmeter.functions;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

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 CarId extends AbstractFunction {

	private static final List<String> desc = new LinkedList<>();
	private static final String KEY = "__CarId"; //在函数助手中的显示名称

	static {
		desc.add(JMeterUtils.getResString("Province_param")); //函数参数-省份简称
		desc.add(JMeterUtils.getResString("Cityid_param")); //函数参数-市级ID
		desc.add(JMeterUtils.getResString("function_name_paropt"));
	}

	private CompoundVariable Province_param;
	private CompoundVariable Cityid_param;
	private CompoundVariable varName;
	public CarId() {
	}

	@Override
	public List<String> getArgumentDesc() {
		// TODO Auto-generated method stub
		 return desc;
	}

	@Override
	public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
		String province = Province_param.execute().trim();//获取所输入参数-省级简称
		String city = Cityid_param.execute().trim();	  //获取所输入参数-市级ID
		//实现逻辑不变
		char[] license = new char[5];
		int i = 0;
		int k = 0;
		int n = 0;
		for (; i < 5; i++) {
			if (Math.random() > 0.5) {
				if (k < 3) {
					license[i] = (char) ('A' + Math.random() * 26);
					k++;
				} else {
					license[i] = (char) ('0' + Math.random() * 10);
					n++;
				}
			} else {
				if (n < 4) {
					license[i] = (char) ('0' + Math.random() * 10);
					n++;
				} else {
					license[i] = (char) ('A' + Math.random() * 26);
					k++;
				}
			}
			
		}
		String licenses = String.valueOf(license);
		String carId = province+city+licenses;
		
		if (varName != null) {
			JMeterVariables vars = getVariables();
			final String varTrim = varName.execute().trim();
			if (vars != null && varTrim.length() > 0) {
				vars.put(varTrim, carId);
			}
		}
		
		return carId;
		
	}

	@Override
	public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
		// TODO Auto-generated method stub

		checkParameterCount(parameters, 2, 3);
		Object[] values = parameters.toArray();

		Province_param = (CompoundVariable) values[0];
		Cityid_param = (CompoundVariable) values[1];
		if (values.length > 2) {
			varName = (CompoundVariable) values[2];
		} else {
			varName = null;
		}

	}

	@Override
	public String getReferenceKey() {
		// TODO Auto-generated method stub
		 return KEY;
	}

}

        代码完成了,就是打成jar包,放到jmeter/lib/ext目录下,然后启动jmeter就可以在函数助手中找到了,添加一个调试取样器,并发看一下效果:

         简单来说我们知道了所做功能的核心代码逻辑,只需要在Eclipse导入所需Jmeter包,继承AbstractFunction类,重写其中的方法,完成后打成jar包放在jmeter/lib/ext目录就可以了。

        相互学习,共同进步!

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社会小刚哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值