最近公司的接口都是MD5 16位加密,所以要使用加密功能。
之前也做過加密,因為用的比較少,所以是寫了一個加密方法,導(dǎo)出JAR包,調(diào)用的。用起來需要很多設(shè)置,并且換算效率也不高。聽前同事說,jmeter可以自己寫函數(shù),放在函數(shù)管理里面,今天自己就根據(jù)網(wǎng)上的大神分享的內(nèi)容,簡單寫一下自己使用過程。
1、首先,eclipse 加載JMeter源碼,部署好(不懂的可以看我前面的隨筆)
2、找到functions,添加MD5_16/32類
3、粘貼32位MD5加密代碼
package org.apache.jmeter.functions;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
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.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
/**
*
*/
@SuppressWarnings("deprecation")
public class MD5_32_Encipher extends AbstractFunction {
// 獲取日志類
private static final Logger log = LoggingManager.getLoggerForClass();
private static final List<String> desc = new LinkedList<String>();
private static final String KEY = "__md5_32"; //$NON-NLS-1$
private static final int MAX_PARA_COUNT = 1;
private static final int MIN_PARA_COUNT = 1;
static {
desc.add("輸入需要進(jìn)行32md5加密的字符串!");
}
private String str = "";
private Object[] values;
public MD5_32_Encipher() {
}
@Override
public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
// 函數(shù)執(zhí)行邏輯,通過該方法取出參數(shù)
str = ((CompoundVariable) values[0]).execute();
log.info("傳入的參數(shù)為:" + str);
str = encryption(str);
log.info("加密后為:" + str);
return str;
}
@Override
public String getReferenceKey() {
// 返回函數(shù)名稱
return KEY;
}
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
// 設(shè)置參數(shù)屬性
checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT);
values = parameters.toArray();
}
@Override
public List<String> getArgumentDesc() {
// 返回參數(shù)描述
return desc;
}
// 32位小寫md5加密算法
public String encryption(String plain) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plain.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return re_md5;
}
}
4、找到functions,添加MD5_16類 粘貼16位MD5加密代碼
package org.apache.jmeter.functions;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
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.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
/**
*
*/
@SuppressWarnings("deprecation")
public class MD5_16_Encipher extends AbstractFunction {
// 獲取日志類
private static final Logger log = LoggingManager.getLoggerForClass();
private static final List<String> desc = new LinkedList<String>();
private static final String KEY = "__md5_16"; //$NON-NLS-1$
private static final int MAX_PARA_COUNT = 1;
private static final int MIN_PARA_COUNT = 1;
static {
desc.add("輸入需要進(jìn)行16md5加密的字符串!");
}
private String str = "";
private Object[] values;
public MD5_16_Encipher() {
}
@Override
public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
// 函數(shù)執(zhí)行邏輯,通過該方法取出參數(shù)
str = ((CompoundVariable) values[0]).execute();
log.info("傳入的參數(shù)為:" + str);
str = encryption(str);
log.info("加密后為:" + str);
return str;
}
@Override
public String getReferenceKey() {
// 返回函數(shù)名稱
return KEY;
}
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
// 設(shè)置參數(shù)屬性
checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT);
values = parameters.toArray();
}
@Override
public List<String> getArgumentDesc() {
// 返回參數(shù)描述
return desc;
}
// 32位小寫md5加密算法
public String encryption(String plain) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plain.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString().substring(8, 24);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return re_md5;
}
}
5、導(dǎo)出functions,命名為:ApacheJMeter_functions.jar
6、復(fù)制這個文件到 JMETER目錄\lib\ext 下,覆蓋即可(如果對自己寫的代碼沒有信心,建議備份原來的文件后再覆蓋)
7、打開JMeter,檢查函數(shù)助手對話框,OK出現(xiàn)了,趕快去試試吧!
http://www.cnblogs.com/allen-zml/p/6911944.html