進行性能測試時,有可能遇到一種場景:接口請求因爲安全問題,須要進行加密發送。html
這種場景下,使用Jmeter實現性能測試,則也須要使用一樣的加密規則發送請求報文。java
要實現此類性能測試有幾種策略:json
本文討論使用Jmeter發送加密請求實現性能測試。api
首先,確認被測產品的加密策略。安全
這個過程應該經過閱讀接口定義文檔,詢問開發人員,輔以抓包解析。app
好比說,對於建立訂單接口的抓包結果:工具
請求報文:性能
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=4b9932154067b4a35bd4c2e9eba8036fui
以上的請求能夠分析得出,加密的部分主要是password參數以及驗籤碼sign(本例中是對請求參數部分加密,實際上總體報文加密可能更常見)。
而後,咱們須要準備相應的加密方法。
這裏推薦讓開發人員直接給出產品原始的加密方法,予以導出造成jar包,以保證性能測試的加密方法與產品原始加密規則一致。
或者若是明確加密方式,也可使用第三方加密jar包,或者本身編寫。這裏更推薦第一種,與開發協調取得。
最後,將準備好的jar包,導入Jmeter測試計劃當中。
使用BeanShellPreProcessor,實現對請求的加密。
思路是:
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項目構成以下:
原文出處:https://www.cnblogs.com/dayu2019/p/11608432.html