对 “jmeter 4.0-函数助手”二次开发
2018-06-22 本文已影响44人
呆呆冬
JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用。
函数调用的语法为:${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称。用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同。有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum}。
那么重点来了:
如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用"\"),否则JMeter会把逗号当成参数分隔符。例如:${__time(EEE, d MMM yyyy)}
因为大部分函数都是包含参数的,而参数本身包含逗号时,就会出现不同的问题,比如_RandomString函数无法正确街区随机字符串,_MD5函数无法加密字符串等问题。相信很多人一开始都会像我一样懵逼半天。
所以,既然Jmeter官网有时间整理相关转义的文档,为什么不直接在代码里面做修改呢?
这不也正是练手Jmeter二次开发的契机吗,Let's do it!
一、准备工作:
先将jmeter源码导入eclipse,具体操作请参考JMeter源码集成到Eclipse笔记。
二、修改源码:
找到函数助手UI的代码:
找到函数助手“生成”操作的代码,添加将参数中的逗号替换为“,”的代码即可:
@Override
public void actionPerformed(ActionEvent e) {
StringBuilder functionCall = new StringBuilder("${");
functionCall.append(functionList.getText());
Arguments args = (Arguments) parameterPanel.createTestElement();
if (args.getArguments().size() > 0) {
functionCall.append("(");
PropertyIterator iter = args.iterator();
boolean first = true;
while (iter.hasNext()) {
Argument arg = (Argument) iter.next().getObjectValue();
if (!first) {
functionCall.append(",");
}
//参数中包含逗号时替换为“\,”
functionCall.append(arg.getValue().replace(",", "\\,"));
first = false;
}
三、ant编译:
- 源码修改完毕并保存后,右键项目最下方build.xml—>Run As—>Ant Build
- 配置完毕,运行验证:右键NewDriver.java—>Run As—>Run Configurations启动jmeter GUI,进入函数助手验证,自动转义参数中的逗号即验证通过。
3.对应的jar包,将其拷贝到日常使用的 jmeter的/lib/ext路径下,替换掉原来名称相同的jar包: