Jmeter内置了一些常用的函数,在Jmeter->选项->函数助手对话框,但是测试过程中这些函数远远不够,
比如:对服务器返回的session信息MD5、Base64加密等,再上传给服务器,作为服务对客户端认证识别的过程。
因此经常需要在脚本引用或者实现自定义的函数。
方法一:
使用Beanshell Sampler、BSF Sampler等实现,现已Base64加密为例,脚本如下:
import sun.misc.BASE64Decoder;
String res = new sun.misc.BASE64Encoder().encode("${session}".getBytes());
vars.put("BASE64",res);
${session}:要加密的字符串参数
BASE64:加密后的字符串保存在${BASE64}参数中
方法二:
将Base64做成Jmeter的可以直接调用的函数,这需要用到Jmeter插件开发,为了简化开发,将Base64添加到已开发的JMeterPlugins.jar中
JMeterPlugins.jar下载地址:http://download.youkuaiyun.com/detail/meitingbee/8090373
官网也可以下载
步骤:
1、使用rar工具解压JMeterPlugins.jar
2、在相应目录Jmeter\functions下新建java文件Base64.java
3、在classpath中添加Base64.java引用的jar包
;%JAVA_HOME%/lib/ApacheJMeter_core.jar;%JAVA_HOME%/lib/ApacheJMeter_java.jar;%JAVA_HOME%/lib/sun.misc.BASE64Decoder.jar
4、使用javac编译java文件,生成Base64.class文件
javac Base64.java
5、命令行使用jar打包
jar JMeterPlugins.jar kg
将kg包含的内容打包,包名JMeterPlugins.jar
6、将JmeterPlugins.jar复制到jmeter\lib\ext文件夹下,打开jmeter,函数助手中可以看到新增的_Base64函数
${__Base64(${session},)}即为${session}的Base64加密字符串
Base64.java文件内容如下:
package kg.apc.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.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 sun.misc.BASE64Encoder;
public class Base64 extends AbstractFunction
{
private static final List<String> desc = new LinkedList();
private static final String KEY = "__Base64";
private Object[] values;
public synchronized String execute(SampleResult paramSampleResult, Sampler paramSampler)
throws InvalidVariableException
{
JMeterVariables localJMeterVariables = getVariables();
String str1 = ((CompoundVariable)this.values[0]).execute();
String str2 = new BASE64Encoder().encode(str1.getBytes());
if ((localJMeterVariables != null) && (this.values.length > 1)) {
String str3 = ((CompoundVariable)this.values[1]).execute().trim();
localJMeterVariables.put(str3, str2);
}
return str2;
}
public synchronized void setParameters(Collection<CompoundVariable> paramCollection)
throws InvalidVariableException
{
checkMinParameterCount(paramCollection, 1);
this.values = paramCollection.toArray();
}
public String getReferenceKey()
{
return "__Base64";
}
public List<String> getArgumentDesc()
{
return desc;
}
static
{
desc.add("String to calculate Base64 hash");
desc.add("Name of variable in which to store the result (optional)");
}
}

本文介绍了如何在JMeter中实现自定义函数,特别是针对Base64加密的需求。提供了两种方法,一种是通过Beanshell或BSF Sampler实现,另一种是开发JMeter插件,将Base64功能集成到JMeterPlugins.jar中,详细阐述了插件开发的步骤和所需文件。
1840

被折叠的 条评论
为什么被折叠?



