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);