Jmeter二次开发——自定义函数

在之前的博文中,Jmeter二次开发——基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发。聊到Jmeter的函数,知道Jmeter使用的博友肯定很熟悉。Jmeter自带一个函数库,有很多的函数,比如:__P,__Random,函数助手给我们提供了很多的方便之处。函数助手使用如下所示:

Jmeter二次开发——自定义函数

但有些时候,自带的函数满足不了真实的测试场景,比如:生成随机手机号。常规做法,应该是设定手机号区号的固定值,再通过__Random函数生成8位随机数,从而拼接成一个手机号,这样的做法的确可以满足,但要想手机号的区段也是随机的呢,是不是就不太好处理了。那就用函数二次开发试试。

函数二次开发 创建以functions结尾的包

这个是特别需要注意点,以.functions结尾,正常创建包即可。

类继承AbstractFunction

二次开发时,新建的类,需要继承AbstractFunction,这个也是需要注意的。至于为什么需要继承AbstractFunction,看源码就能明白,源码如下所示:

public abstract class AbstractFunction implements Function { public AbstractFunction() { } public abstract String execute(SampleResult var1, Sampler var2) throws InvalidVariableException; public String execute() throws InvalidVariableException { JMeterContext context = JMeterContextService.getContext(); SampleResult previousResult = context.getPreviousResult(); Sampler currentSampler = context.getCurrentSampler(); return this.execute(previousResult, currentSampler); } public abstract void setParameters(Collection<CompoundVariable> var1) throws InvalidVariableException; public abstract String getReferenceKey(); protected JMeterVariables getVariables() { return JMeterContextService.getContext().getVariables(); } protected void checkParameterCount(Collection<CompoundVariable> parameters, int min, int max) throws InvalidVariableException { int num = parameters.size(); if (num > max || num < min) { throw new InvalidVariableException(this.getReferenceKey() + " called with wrong number of parameters. Actual: " + num + (min == max ? ". Expected: " + min + "." : ". Expected: >= " + min + " and <= " + max)); } } protected void checkParameterCount(Collection<CompoundVariable> parameters, int count) throws InvalidVariableException { int num = parameters.size(); if (num != count) { throw new InvalidVariableException(this.getReferenceKey() + " called with wrong number of parameters. Actual: " + num + ". Expected: " + count + "."); } } protected void checkMinParameterCount(Collection<CompoundVariable> parameters, int minimum) throws InvalidVariableException { int num = parameters.size(); if (num < minimum) { throw new InvalidVariableException(this.getReferenceKey() + " called with wrong number of parameters. Actual: " + num + ". Expected at least: " + minimum + "."); } } protected final void addVariableValue(String value, CompoundVariable[] values, int index) { if (values.length > index) { String variableName = values[index].execute().trim(); if (StringUtils.isNotEmpty(variableName)) { JMeterVariables vars = this.getVariables(); if (vars != null) { vars.put(variableName, value); } } } } } 参数解释 getArgumentDesc()

获取界面所要显示的参数说明

execute()

函数的主体业务

getReferenceKey()

获取函数的名称

setParameters()

设置参数,接收用户传递的参数

checkParameterCount()

检测参数数量是否准确

函数开发 获取函数的名称

名称自定义,如下所示:

private static final String key = "__XXX";

这里需要注意的是:函数开头是以2个下划线开头。

名称定义好了,那如何获取呢?就用我们刚才说的方法获取即可,如下所示:

@Override public String getReferenceKey() { return key; } 获取界面所要显示的参数说明

在Jmeter的函数助手中,对应函数都有对应的参数说明,如下所示:

Jmeter二次开发——自定义函数

那如何配置能实现呢?代码如下:

private final static List<String> args = new LinkedList<String>(); static{ args.add("界面参数"); }

如果有多个参数怎么办?多个参数,多个args.add即可

获取参数名称,同样用刚才介绍的方法获取即可,如下所示:

@Override public List<String> getArgumentDesc() { return args; } 获取参数值 @Override public void setParameters(Collection<CompoundVariable> args0) throws InvalidVariableException { //检测用户调用函数时,检查参数个数,个数不对则报错 checkParameterCount(args0,3); Object[] params = args0.toArray(); //转换只为string telNum = ((CompoundVariable)params[0]).execute(); start = ((CompoundVariable)params[1]).execute(); end = ((CompoundVariable)params[2]).execute(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpddpg.html