JMeter中3種引數值的傳遞

  本文由騰訊WeTest團隊提供,更多資訊可直接戳連結檢視:http://wetest.qq.com/lab/
  微信號:TencentWeTest

小夥伴們在使用JMeter的過程中,肯定會遇到引數值傳遞的問題,下面來和大家總結下,在使用JMeter做壓力測試的時候,常見的3種引數值的傳遞是怎樣的。

(一)從CSV檔案讀取要批量輸入的變數

假如我們要登入的資料儲存在login.csv檔案裡,資料如下:

在JMeter中,我們需要新增CSV Data Set Config這個配置檔案,如下圖:



新增後,我們需要填寫其中的必要引數,如Filename和Variable Names:



這裡要注意下Variable Names裡面的分隔符,為啥是用’,’號呢,因為csv檔案login.csv用notepad 開啟是如下所示,前面的欄位是代表使用者的user,後面的欄位代表的pwd:



配置好CSV Data後,我們新增login的HTTP請求,截圖如下:



其中使用者的user和pwd都是用${}包圍著的,這個是JMeter的語法規定。配置執行緒數為5,點選啟動按鈕執行後,看到的結果如下:




可以看到,login.csv檔案中的2個欄位被當作引數值進行了傳遞。

(二)利用Cookie進行值的傳遞

  用JMeter進行介面除錯時,有時候會遇到需要登入的情況,如請求wetest的DataSearchAjax介面:


返回的結果如下:


出現這種情況的原因很明顯是未登入引起的。一個較好的解決方法就是將登入後的cookies儲存下來,在訪問DataSearchAjax介面的時候,帶上使用者登入後的cookies資訊進行檢視。

   在JMeter中,我們可以通過如下途徑進行cookies的傳遞,如下圖新增HTPP Cookie管理器:


再給登入的介面新增前置處理器Bean Shell PreProcessor,用來儲存登入的cookies:


下面,我們要在Bean Shell PreProcessor裡面新增我們的cookies值了。

import org.apache.jmeter.protocol.http.control.CookieManager; import org.apache.jmeter.protocol.http.control.Cookie; // 身份驗證必須的cookie值欄位(可以詢問開發哪些是必須要校驗的欄位)// 可以在登入後,點選chrome裡URL右邊的檢視網站資訊按鈕,檢視所有的cookie值找到// wetest的校驗欄位是:csrftoken和sessionidCookieManager manager = sampler.getCookieManager();String csrftoken = "898b3ade5cb3744140503da601dee5d6793f82807cda581de9eb0982c05dfdc7a";  //定義Cookie物件,其中引數:cookie的名稱, cookie值, cookie域, 路徑, 安全Cookie cookie = new Cookie("csrftoken",csrftoken,"wetest.qq.com","/",false,0);manager.add(cookie);String sessionid = "0ir0hrodptu5qgv9qurk98c3l4"; Cookie cookie1 = new Cookie("sessionid",sessionid,"wetest.qq.com","/",false,0);manager.add(cookie1);

新增完HTPP Cookie管理器和在前置處理器Bean Shell PreProcessor寫好指令碼後,再次執行登入介面和DataSearchAjax介面:

可以看到,後面的請求攜帶了我們在Bean Shell PreProcessor指令碼中儲存的cookie值,並且成功返回了要查詢的資料。


(三)利用正則匹配提取上一個介面的返回資料作為下個請求的輸入

  用JMeter進行介面除錯時,經常會遇到上一介面的返回值中的某個欄位,要作為下一介面的輸入,這種情況下,我們需要利用正則匹配來提取我們需要的值。


例如,若要提取相應資料中的goodpraise欄位作為下個介面的輸入的話,可以在該介面請求後面新增正規表示式提取器:


我們給正規表示式提取器命名為get_goodpraise,並填寫引用名稱、正規表示式、模板、匹配數值、預設值,填寫後的如如下:



填寫完成後,在新增新的HTTP請求,來測試提取到的goodpraise_name欄位:


這裡要注意,${}裡面填寫的一樣要是引用名稱的變數,儲存後執行:


若返回的請求goodpraise_name欄位為-1,-1是我們設定的預設欄位。那說明我們的正規表示式寫錯了,要仔細檢查下改成正確的正規表示式,再執行:


可以看到,我們提取到的goodpraise_name欄位成功傳遞給新的http請求。

  至此,JMeter中3種引數值的傳遞已全部講解完,小夥伴們學會了嗎~*(^_^)*~

 

  本文由騰訊WeTest團隊提供,更多資訊可直接戳連結檢視:http://wetest.qq.com/lab/
  微信號:TencentWeTest