最近公司的接口都是MD5  16位加密,所以要使用加密功能。

之前也做過加密,因為用的比較少,所以是寫了一個加密方法,導(dǎo)出JAR包,調(diào)用的。用起來需要很多設(shè)置,并且換算效率也不高。聽前同事說,jmeter可以自己寫函數(shù),放在函數(shù)管理里面,今天自己就根據(jù)網(wǎng)上的大神分享的內(nèi)容,簡單寫一下自己使用過程。

1、首先,eclipse 加載JMeter源碼,部署好(不懂的可以看我前面的隨筆)

2、找到functions,添加MD5_16/32類

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

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)了,趕快去試試吧!

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

 

http://www.cnblogs.com/allen-zml/p/6911944.html