Jmeter 二次開發 函數助手 AES加解密
- 1. 環境準備
- 2. 關鍵技術說明
- 2.1 離線導包
- 2.2 示例代碼
- 3. 代碼包
- 4. 結果演示
1. 環境準備
- IDE :IntelliJ IDEA 2021.1.1 x64
- JAVA環境 :jdk1.8.0_251
- 離線導包:導入Jmeter安裝目錄下lib/ext下的ApacheJmeter_function.jar 和 ApacheJmeter_cotre
2. 關鍵技術說明
2.1 離線導包
重點:
- 程序依賴的jar包需要放在ext路徑下
- 程序依賴的class需要放在 ApacheJmeter_function 中,和新開發的class放在同級
2.2 示例代碼
以AES CBC加密為例
package org.apache.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.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;public class AES_CBC_Encrypt extends AbstractFunction {//自定義function的描述private static final List<String> desc = new LinkedList<>();//function名稱private static final String KEY = "__AES_CBC_Encrypt";static {desc.add("json_input");desc.add("secret_input");desc.add("iv_input");}private CompoundVariable json_input;private CompoundVariable secret_input;private CompoundVariable iv_input;// 函數的邏輯執行主體/** {@inheritDoc} */@Overridepublic String execute(SampleResult previousResult, Sampler currentSampler)throws InvalidVariableException {String bodyData = String.valueOf(json_input.execute());String secret_key = String.valueOf(secret_input.execute());String iv_key = String.valueOf(iv_input.execute());return AES_CBC.encryptCBC(bodyData, secret_key, iv_key);}// 用來接收和處理GUI界面的參數的傳值/** {@inheritDoc} */@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {checkParameterCount(collection, 3);Object[] values = collection.toArray();json_input = (CompoundVariable) values[0];secret_input = (CompoundVariable) values[1];iv_input = (CompoundVariable) values[2];}// 用來定義函數的名稱,把自定義的內容顯示在函數對話框中/** {@inheritDoc} */@Overridepublic String getReferenceKey() {return KEY;}// 用來設置GUI界面的函數對話框,把自己定義的參數給顯示在jmeter的GUI界面上/** {@inheritDoc} */@Overridepublic List<String> getArgumentDesc() {return desc;}public static void main(String[] args) { // AES支持三種長度的密鑰:128位、192位、256位。// 代碼中這種就是128位的加密密鑰,16字節 * 8位/字節 = 128位。String srt = "123456778";String iv_seed = "1234567887654321";System.out.println("密鑰key:" + srt);System.out.println("iv:" + iv_seed);System.out.println("--------AES_CBC加密解密---------");String cbcResult = AES_CBC.encryptCBC(aes, srt, iv_seed);System.out.println("aes_cbc加密結果:" + cbcResult);System.out.println();System.out.println("---------解密CBC---------");String cbcDecrypt = AES_CBC.decryptCBC(cbcResult, srt, iv_seed);System.out.println("aes解密結果:" + cbcDecrypt);System.out.println();}
}
3. 代碼包
https://download.csdn.net/download/weixin_39451323/88218178
4. 結果演示
加密:
${__AES_CBC_Encrypt({"token":"0e84b297-d8f2-4779-b7f1-60966ed19ce1"},qwertyuiiuytrewq,1234567887654321)}
解密:
${__AES_CBC_Decrypt(RwHL3jF01WDd9T3tKRUi2XIWuPJ/a5H78mExd8I3/fArE6778r7EsbSUwjx7cncAkkfrfc6QV53NrStWBnissA==,qwertyuiiuytrewq,1234567887654321)}
參考資料:jmeter官方函數https://github.com/ufctester/apache-jmeter/tree/master/src/functions/org/apache/jmeter/functions