jmeter加密解密(加密篇)


最近剛好在弄jmeter加密解密,可以分享下。(有一段時間沒寫了,有點不知道從何寫起,這篇寫的有點亂o(╥﹏╥)o)

需求是:接口中的請求體的部分參數需要先加密再請求,返回的結果中部分字段需解密。

1、首先,先按照正常的請求弄好。

 2、然后,將開發提供給測試的加密解密的jar包添加到測試計划。當然,也可以直接將這些jar包放到jmeter安裝目錄jmeter\apache-jmeter-5.1.1\lib\ext中,這樣就不用添加到測試計划中。(jar包有時候提供不齊全,如何確認自己的jar包是齊全的,下面會講解) 

3、然后,在請求下新建Beanshell預處理程序,像我們添加的這些jar包,Beanshell預處理程序也需要導入,這里的導入用import就行。(因為jar包里都是class文件,其實是看不到實際代碼的,如何想看加密解密對應的方法,可以跟開發要這個加密解密類(RSAUtils)的java文件)

Beanshell與java編碼是一樣的邏輯,只是有些類型格式不同。

4、然后,下面就可以編寫代碼了。按照RSAUtils.java文件,加密有2種,私鑰加密和公鑰加密,對應的解密分別為私鑰解密和公鑰解密。這里只用一個講解,用的例子是公鑰加密和公鑰解密。

公鑰加密的方法是publicEncrypt(data, publicKey),也就是說我們需要設置2個變量:data和publicKey。其中data是json格式的。

先按照最簡單的思路寫,為了保證beanshell預處理程序里的代碼是可以正常使用,先寫死data和publicKey公鑰的數值。(這里需要注意的一點是json在jmeter的beanshell中需要轉義,不然會報錯)

如果json不轉義,會報錯。比如:

String data = "{"a":"2","b":"3"}";

System.out.println("json:"+data);//打印

日志報錯信息:

2020-04-10 14:11:43,543 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``import xxx

(如果json數值里本身有部分是有轉義符的,則需要二次轉義) 

5、從RSAUtils.java文件中可以看到加密的方式publicEncrypt(data, publicKey),那我想拿到加密結果,那么也就是RSAUtils.publicEncrypt(data, publicKey)。那么beanshell預處理程序的加密代碼就寫好了:

打印出結果,這里看到已經加密成功了。 

 6、我們需要怎么將加密后的數值給到請求體中呢?如果直接使用beanshell預處理定義的加密結果encryptMsg變量,執行:  

那么我們就需要定義一個全局變量,設置在測試計划中,我這里設置為sas,beanshell也需要加一行代碼:vars.put("sas",encryptMsg);//將加密后的值賦值給全局變量 

執行,看下結果:可以看到請求體已經拿到加密后的數值了。 

到這里,加密就完成了。

如何判斷jar包是否齊全:

這里我先注釋掉一部分導入jar包和類,執行以下,會發現提示沒找到JSONObject類和RSAUtils.publicEncrypt方法。因為一直提示這個,但又不知道是缺少了哪些jar包。一次偶然下,加了try{}catch(){},發現會提示具體少了哪些類,就可以讓開發提供對應的jar包啦~

加了try{}catch(){}后,執行,發現會提示具體少了哪些jar包: 

發現缺少com/baomidou/mybatisplus/toolkit/IOUtils,讓開發導出對應的jar包,假設這個jar包名稱:mybatisplussup,那么我們需要在測試計划中添加這個jar包,且beanshell預處理程序中,需要加2行代碼:import mybatisplussupport.*;

import com.baomidou.mybatisplus.toolkit.IOUtils;

總結:日志是顯示語法錯誤,比如未定義變量;但要看編譯錯誤,用try{}catch(){}查看問題更加直觀。


免責聲明!

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



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