1. 程式人生 > >jmeter 傳送加密請求 beanshell斷言 執行緒組間傳遞引數 jmeter bean shell斷言加密的響應資訊(加密介面測試二) jmeter 執行緒組之間的引數傳遞(加密介面測試三)

jmeter 傳送加密請求 beanshell斷言 執行緒組間傳遞引數 jmeter bean shell斷言加密的響應資訊(加密介面測試二) jmeter 執行緒組之間的引數傳遞(加密介面測試三)

 

 

原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html

最近在做http加密介面,請求頭的uid引數及body的請求json引數都經過加密再發送請求,加密方式為:ase256。所以,jmeter傳送請求前也需要對uid及json引數進行加密。

我這裡是讓開發寫了個加密、解密的jar,jmeter直接呼叫這個jar包進行加密、解密。

1、加解密的jar包放到jmeter的lib\ext目錄下

2、在測試計劃-->Add directory or jar to classpath 新增需要呼叫的jar包

jmeter呼叫

import com.changfu.EncryptAndDecryptInterface;  #匯入加密類
String json_str = "{\"username\":\"amychen02\",\"password\":\"F59BD65F7EDAFB087A81D4DCA06C4910\",\"deviceNo\":\"355848069888942\"}";  #請求的引數
String enpost=EncryptAndDecryptInterface.getEncryptPost(json_str);  #將請求引數加密
vars.put("enpost",enpost);   #資料存到jmeter變數中

 

 

4、請求傳送加密碼的引數

在http請求-->body data直接使用上一步加密後的引數變數enpost

 

jmeter bean shell斷言加密的響應資訊(加密介面測試二)

斷言加密的響應資訊

1、在http請求-->新增-->斷言-->bean shell 斷言

import com.changfu.EncryptAndDecryptInterface;  //匯入jar包的EncryptAndDecryptInterface類
import org.json.JSONObject; //匯入
String json_res = prev.getResponseDataAsString(); //獲取上個響應資訊
String resb = EncryptAndDecryptInterface.getDecrypt(json_res);  //呼叫解密工具解密
vars.put("resb",resb);  
log.info("解密後的響應資訊json="+resb);
JSONObject resbonseJson = new JSONObject(resb); //解析json
String status_str = resbonseJson.get("status").toString(); //擷取status欄位值
vars.put("status_str",status_str);
log.info("執行狀態="+status_str);
String result = "0";
vars.put("result_str",result);
if (!status_str.equals(result)) {   //響應資訊的狀態值status_str不等於0,則斷言其他與實際值不一致
    Failure=true;       
    FailureMessage="statuscode與實際值不一致, 實際值為:"+status_str+", 響應資訊: "+resb;
}

 

 

 

 

 

jmeter 執行緒組之間的引數傳遞(加密介面測試三)

場景測試中,一次登入後做多個介面的操作,然後登入後的uid需要關聯傳遞給其他介面傳送請求的時候使用。

1、在登入介面響應資訊中提取uid欄位值

  1>login請求 -->新增 -->後置處理器--> bean shell postprocessor

 

 

2,在bean shell postprocessor提取uid

  import com.changfu.EncryptAndDecryptInterface;
import org.json.JSONArray;
import org.json.JSONObject;

String json_res = prev.getResponseDataAsString(); //獲取登入請求的響應資訊
String resb = EncryptAndDecryptInterface.getDecrypt(json_res);  //呼叫解密工具解密,對響應資訊解密
vars.put("resb",resb);  
log.info("解密後的響應資訊resb="+resb);
JSONObject data_obj = new JSONObject(resb);   //解析json響應資訊

String uid_str = data_obj.get("result").get("id").toString();  //擷取響應資訊中uid的值 
props.put("uid_str",uid_str);   //將uid_str資料存到變數中,這裡用props.put,其他執行緒組可呼叫請該變數
log.info("加密前的uid="+uid_str);

 

 

需要傳遞的引數新增到使用者引數

 

 3、在另一個執行緒組接收該變數uid_str

  1>執行緒組->新增-->前置處理器-->BeanShell PreProcessor import com.changfu.EncryptAndDecryptInterface;

String uid_str = props.get("uid_str"); //獲取登入傳遞的uid_str變數
String enuid=EncryptAndDecryptInterface.getEncryptUID(uid_str);  //加密登入返回的uid
vars.put("enuid",enuid);
log.info("加密登入後返回的uid"+enuid);