1. 程式人生 > >利用JMeter的beanshell進行介面的加密處理

利用JMeter的beanshell進行介面的加密處理

 最近專案中在做http協議的介面測試,其中介面請求報文資料有個欄位值需要用到加密後的簽名,即出於網路傳輸過程中,對資料安全的考慮,要對請求的資料進行特定的處理(加密),再進行請求。

     剛開始由於專案趕進度的需要,選擇的做法是:讓開發寫個加密處理生成請求報文的程式碼,然後每次測試傳送一次請求都用eclipse跑一遍該程式碼,測試資料的修改也是在程式碼中變更。這樣跑一輪測試下來,測試同事都反映太累了。

     jmeter中的BeanShell,可以用來呼叫我們的工具類對資料進行處理,然後再進行相關的請求。自己剛好以前工作中使用過,於是就利用jmeterbeanshell來解決這個問題。

解決過程:

1、獲取對應介面加密的工具類,並生成jar

    這個需要看測試人員是否具有程式碼檢視的許可權,如果沒有許可權,直接要求開發人員把該工具類的程式碼發過來即可。

    eclipse中建個Java工程,把得到的工具類程式碼導進去。然後再匯出成jar包。

wKiom1dhEhKRL_5RAAHJEtHpgO8336.png

wKiom1dhEjKAgFlZAACa8FTB_GI666.png

2、把jar包放到${jmeter_home}\lib\ext

    將匯出的jar包放到jmeterlib\ext目錄裡。也可以不放進該目錄,然後在jmeter的測試計劃直接引用即可。

wKioL1dhE3GyObqKAAAVofVMYWc764.png

3、建立jmeter指令碼

    jmeter中建立一個專案,新增一個httprequest,在這個請求裡新增一個

BeanShell PreProcessor

wKioL1dhE4KxqiB7AAAg2o8temc576.png

     http請求中根據實際情況填寫對應的資料:

wKiom1dhEpewI3ulAADLsog90JQ610.png

    BeanShellPreProcessor中匯入我們的jar包,BeanShell PreProcessor中的兩個方法是我們最常用到的:vars.get(String paramStr)vars.put(Stringkey,String value),前一個是從jmeter中獲得變數值,後一個是將資料存到jmeter變數中。

wKioL1dhE7eiHhekAAECkCFbwfI183.png

說明:mac是需要簽名加密的欄位,在BeanShell PreProcessor中主要是利用加密的工具類對報文進行加密,得到加密後的

mac值,然後在介面報文中呼叫mac即可。

4、執行jmeter指令碼

     通過上述步驟指令碼即可解決介面報文需要進行加密後才傳送請求的測試處理。

未加密的請求結果:

 wKioL1dhE-GzUefdAABmQWHI0CI041.png

利用beanshell加密後的請求結果:

 wKioL1dhE_Sjp097AACcuJwLjac033.png

    至此,介面請求的加密處理已完成,不僅解決需通過程式碼生成請求報文的繁瑣方法,還可以在此指令碼的基礎上,實現資料驅動的介面自動化測試,測試小夥伴們就可以愉快的進行測試了。