Jmeter二次开发——自定义函数 (2)

获取参数值中,可以检测函数的入参个数是否准确,不准确则会报错,报错信息如下所示:

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

函数的主体业务

介绍到这,就是函数的核心内容了,该函数要实现什么功能,就是在该方法中处理,示例代码如下所示:

@Override public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException { SampleResult sampleResult1 = new SampleResult(); try { sampleResult1.sampleStart(); int index=getNum(0,telFirst.length-1); String telNum = telFirst[index]; String two = String.valueOf(getNum(1, 888) + 10000).substring(1); String three = String.valueOf(getNum(1, 9100) + 10000).substring(1); tel = telNum + two + three; logger.info("手机号区段:"+ telNum +" 随机生成的手机号是:" + tel); if (varName != null) { JMeterVariables vars = getVariables(); final String varTrim = varName.execute().trim(); if (vars != null && varTrim.length() > 0) { vars.put(varTrim, telNum); } } sampleResult1.setResponseData("手机号区段:"+ telNum +" 随机生成的手机号是:" + tel,"utf-8"); sampleResult1.setSuccessful(true); }catch (Exception e){ sampleResult.setSuccessful(false); e.printStackTrace(); }finally { sampleResult1.sampleEnd(); } return tel; } 代码调试

写到这里,基本完成了,但还是得测试下,功能是否正常,如果先打jar包,丢到Jmeter中,发现有bug的话,来来回回处理,就折腾了,所以还是需要先测试下的。

在test下新建测试类,示例代码如下所示:

import org.junit.Test; public class Function_Test { @Test public void phoneTest() throws Exception { RandomPhoneJmeterFunctions randomPhone= new RandomPhoneJmeterFunctions(); String phoneString = randomPhone.execute(); System.out.println("随机手机号:" + phoneString); } }

测试代码很简单,运行测试类,没有报错并打印出手机号,则说明没有问题。运行后的结果如下所示:

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

生成jar包

生成jar包就不重复讲了,可以看以前的博文,IDEA的基本操作——导入导出jar包

Jmeter中使用

代码写好后,自然是要在jmeter中验证下功能的,我们将生成的jar包放到jmeter的\lib\ext文件夹下,如果jmeter已启用,则需要重启哦,不然不会生效。

打开jmeter后,使用函数助手,看新开发的函数是否有展示,如下所示:

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

生成函数变量,操作如下所示:

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

新建线程组,并添加http请求,验证码生成的手机号是不是随机的,运行后,查看结果树,如下所示:

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

也可以通过日志查看,开发的时候,加了响应日志,如下所示:

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

到此,就说明功能没问题了。函数开发按上述步骤就可以完成,遇到不满足测试场景的时候,就可以自己diy一个了。

最后附上完整代码,如下所示:

private static Logger logger = LogManager.getLogger(RandomPhoneJmeterFunctions.class.getName()); private String tel; //定义函数名称 private static final String KEY = "__RandomPhone"; //定义函数界面显示的参数名称 private static final List<String> desc = new LinkedList<String>(); static{ desc.add("界面参数"); } private static final String[] telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153 ".split(","); private CompoundVariable varName; //业务主逻辑 @Override public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException { SampleResult sampleResult1 = new SampleResult(); try { sampleResult1.sampleStart(); int index=getNum(0,telFirst.length-1); String telNum = telFirst[index]; String two = String.valueOf(getNum(1, 888) + 10000).substring(1); String three = String.valueOf(getNum(1, 9100) + 10000).substring(1); tel = telNum + two + three; logger.info("手机号区段:"+ telNum +" 随机生成的手机号是:" + tel); if (varName != null) { JMeterVariables vars = getVariables(); final String varTrim = varName.execute().trim(); if (vars != null && varTrim.length() > 0) { vars.put(varTrim, telNum); } } sampleResult1.setResponseData("手机号区段:"+ telNum +" 随机生成的手机号是:" + tel,"utf-8"); sampleResult1.setSuccessful(true); }catch (Exception e){ sampleResult.setSuccessful(false); e.printStackTrace(); }finally { sampleResult1.sampleEnd(); } return tel; } //获取参数值 @Override public void setParameters(Collection<CompoundVariable> args0) throws InvalidVariableException { //检测用户调用函数时,检测参数个数 checkParameterCount(args0,1); Object[] params = args0.toArray(); if (params.length > 0) { varName = (CompoundVariable) params[0]; } else { varName = null; } } //获取函数的名称 @Override public String getReferenceKey() { return KEY; } //获取界面所要显示的参数说明 @Override public List<String> getArgumentDesc() { return desc; } private static int getNum(int start,int end) { return (int)(Math.random()*(end-1)); }

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

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