1. 程式人生 > >jmeter通過BeanShell 腳本,實現對http請求參數的加密

jmeter通過BeanShell 腳本,實現對http請求參數的加密

一個 sha 下載源碼 功能 mage 使用 1-1 one 裏的

jmeter一直是一款很好的接口和性能測試工具,它是開源的,不需要為此支付任何費用,而且可以下載源碼,可以在修改源代碼並在此基礎上拓展自己的功能或插件,它可以跟ant和jenkins結合起來搭建自己的自動化接口測試框架。它的好還在於它是純JAVA開發的,因此,它可以更好的跟JAVA對接,通過引入自己封裝的jar文件,可以方便的實現對jmeter各種個性化需求的功能的拓展,下面以一個實際例子來說明jmeter怎麽引入自己開發的java工具類來實現對http請求參數的加密處理。

  在此之前,我們假設有這麽一個場景:我們打算對一個http請求做接口測試,但是該請求的一些參數或http頭文件信息裏包含了一些加密的參數,在實際的應用中,這些加密處理是由前端或app客戶端來實現的,其他接口也不會返回給我們這些加密數據。那就問題就來了,前端把參數加密傳給後端,後端接口用加密的數據去做校驗或其他處理,那麽使用jmeter做腳本的時候,這些加密的參數該怎麽辦?jmeter沒有提供給我們現成的加密功能,而且每個數據的加密方式可能都不一樣,我們要怎麽才能實現對jmeter請求的這些參數加密呢?這就需要我們使用到Beashell 腳本了。

  說到jmeter 的Beanshell使用,這裏我們可能會用到jmeter的這些組件:取樣器中的BeanShell Sampler,配置元件:前置處理器中的BeanShell PreProcessor,後置處理器中的BeanShell PostProcessor,斷言中的BeanShell斷言。

  接下來回到剛才的場景,http請求裏的一些參數是加密的,為了使用jmeter正常發送帶加密參數的http請求來測試這個http接口,我們可以給該http請求添加一個BeanShell PreProcessor,通過在BeanShell PreProcessor裏實現對參數的加密。下面上具體的實例:

  假設有這麽一個app應用的HTTP接口,接口文檔如下:

  接口名稱:XXX登錄

  接口協議:HTTP

  請求方式:POST

  參數類型:JSON

  路徑參數:phonenumber,用戶手機號碼

  請求體參數:

  device 設備信息,JSON格式

  password 用戶密碼,密碼SHA-256編碼加密串數據的大寫

  首先,我們需要用java代碼來實現SHA-256加密功能:

項目結構為com.Base64

技術分享

SHA256加密代碼主體:

技術分享

技術分享

ok,加密算法寫好後,把其打包成jar文件,這裏我打包的文件為:Base64URLSafe.jar ,把Base64URLSafe.jar 放到jmeter lib/ext目錄下,接下來就可以在jmeter裏引入這個jar包了。

jmeter腳本做法如下:

1、測試計劃裏引入外部jar包:

技術分享

2.添加一個http取樣器:

技術分享

3. 給這個http取樣器添加一個 前置處理器:BeanShell PreProcessor,其內容如下

技術分享

接下來就可以在需要用到變量的地方引用即可,應用方法:${PASSWORD_SHA256}

技術分享

運行結果如下:

技術分享

可以看到, 密碼123456 已結經過SHA256加密並全部轉化為大寫字母了。OK,相信大家可以從這個簡單的例子中聯想到它的很多用法,了解了這個特性,那麽足夠你用jmeter和java來做很多事情了,最後要說的是,本例中之所以是通過引入外部jar包的形式,是想通過它說明,我們可以把很多復雜的、公用的工具類的代碼都封裝在jar裏這樣方便我們精簡和重用代碼。

jmeter通過BeanShell 腳本,實現對http請求參數的加密