性能測試:Jmeter-Beanshell請求加密實例


進行性能測試時,有可能遇到一種場景:接口請求由於安全問題,需要進行加密發送。

這種場景下,使用Jmeter實現性能測試,則也需要使用同樣的加密規則發送請求報文。

要實現此類性能測試有幾種策略:

  1. 直接去除密文規則 - 由於報文加密並非性能關鍵,那么簡單起見,直接測試明文請求一定程度上是可以接受的。
  2. 使用同樣的加密規則加密報文發送 - 這樣處理顯然更接近實際場景,所以是一般比較推薦的做法。

本文討論使用Jmeter發送加密請求實現性能測試。

 

1. 打包加密方法Jar包,導入Jmeter

首先,確認被測產品的加密策略。

這個過程應該通過閱讀接口定義文檔,詢問開發人員,輔以抓包解析。

比如說,對於創建訂單接口的抓包結果:

請求報文:

POST https://ops.********.cn/***-api/member/system/login HTTP/1.1
Accept-Language: zh-CN,zh;q=0.8
User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 4A Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
token: 90e76710e105b217d185832057220cdd
appCode: ******
compCode: ****
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Host: ops.********.cn
Connection: Keep-Alive
Accept-Encoding: gzip

account=*********&password=2ac9cb7dc02b3c0083eb70898e549b63&sign=4b9932154067b4a35bd4c2e9eba8036f

以上的請求可以分析得出,加密的部分主要是password參數以及驗簽碼sign(本例中是對請求參數部分加密,實際上整體報文加密可能更常見)。

 

然后,我們需要准備相應的加密方法。

這里推薦讓開發人員直接給出產品原始的加密方法,予以導出形成jar包,以保證性能測試的加密方法與產品原始加密規則一致。

或者如果明確加密方式,也可以使用第三方加密jar包,或者自己編寫。這里更推薦第一種,與開發協調取得。

 

最后,將准備好的jar包,導入Jmeter測試計划當中。

 

  

2. 加密參數

使用BeanShellPreProcessor,實現對請求的加密。

思路是:

  1. 導入使用第一步中的jar包作為加密工具庫
  2. 使用特定密鑰,對需要加密的字段進行加密處理
  3. 將加密后的字段存儲為變量,供接口調用使用。

BeanShell代碼如下:

import cn.hutool.json.JSONUtil;
import com.***.controller.HttpClientUtil;
import com.***.encrypt.EncryptUtil;
import com.***.encrypt.gmhelper.MD5Util;
import java.util.HashMap;//設置密鑰
   String signKey = "47fbbbd********0b8d7378";

   //讀取用戶賬戶變量
   String useraccount = vars.get("user");
   String pass = vars.get("pass");

   //加密處理
   paramMap = new HashMap();

   String password = MD5Util.encrypt(pass);
   
   paramMap.put("account", useraccount);
   paramMap.put("password", password);
   
   String sign = EncryptUtil.md5sign1(paramMap, signKey).toLowerCase();

   //將加密后的參數存儲為變量
   vars.put("password",password);
   vars.put("sign",sign)

 隨后,只要在接口請求當中,使用變量的形式傳參,即可實現請求報文部分加密傳送。

調用接口發送請求,驗證得知報文加密已實現:

 

同理可以實現多個不同接口的請求加密過程,整體Jmeter項目構成如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM