Jmeter(五十二) - 從入門到精通高階篇 - jmeter之跨執行緒組傳遞引數(詳解教程)

巨集哥發表於2021-06-11

1.簡介

之前分享的所有文章都是隻有一個執行緒組,而且引數的傳遞也只在一個執行緒組中,那麼如果需要在兩個執行緒組中傳遞引數,我們怎麼做呢?巨集哥今天就給小夥伴或者童鞋們講解一下,如何實現線上程組之間傳遞引數。

2.什麼是jmeter之跨執行緒組傳遞引數

顧名思義就是:使用jmeter工具在兩個或者兩個以上的執行緒組之間傳遞引數。

3.為什麼線上程組之間傳遞引數?

首先往往我們接到一個效能測試任務需要對某一個介面進行壓測時不需要每一次請求都取登入(如果每次都登入這樣就會影響測試結果),那麼遇到這種情況我們就要通過登入介面獲取token(session、cookie)了,然後用另一個執行緒組進行壓測。
其次大家可以想象一個場景,假設我們在測試一個購物車程式,而加東西進購物車之前,我們需要先登入(這樣的邏輯設計就是不正確的,每選擇一個商品新增到購物車,就需要重新登入一下,那這樣的設計誰還會用你家的APP。)。在正常的場景下,我們的登入狀態可以保持一段時間,不用每次新增購物車之前都登陸一下,在這種情況下,我們測試的時候就需要把登入和新增購物車寫到兩個執行緒組裡,然後問題就來了,兩個執行緒組直接無法直接共享引數。

以上兩種情況是工作中經常面臨的實際問題,所以需要線上程組之間傳遞引數。

4.如何線上程組之間傳遞引數?

JMeter變數作用域侷限於所屬執行緒。這樣設計是經過深思熟慮的,目的是讓測試執行緒能夠獨立運轉。有時候使用者可能需要在不同執行緒間(可能屬於同一個執行緒組,也可能不屬於同一個執行緒組)傳遞變數。在Jmeter中,除了基本變數之外,還有一種,是它本身的屬性,property,我們可以藉助屬性來完成執行緒組間的變數傳遞。屬性為所有 JMeter 執行緒所共享,因此當某個執行緒設定一個屬性後,其他執行緒就可以讀取更新後的值。

5.實戰

 閒話少說,巨集哥還是快速實踐一下,具體步驟如下:

1、建立測試計劃,並重新命名為“ jmeter之跨執行緒組傳遞引數”,然後新增執行緒組,並重新命名為“登入”。如下圖所示:

2、選中執行緒組,右鍵新增取樣器“HTTP請求”,並重新命名為“獲取token”,然後配置取樣器。如下圖所示:

3、選中執行緒組,右鍵新增監聽器“察看結果樹”,儲存指令碼,執行jmeter,察看結果樹(測試一下是否可以成功的獲取到token,巨集哥這裡已經獲取到了,然後留著等在其他執行緒組備用)。如下圖所示:

從第三步可以看到巨集哥已經成功獲取到token了,緊接著就是要將token提取出來,然後再將token設定到屬性中,這樣其他執行緒組就可以呼叫了。

4、將token提取出來,巨集哥這裡使用的是正則提取器,你可以使用其他的提取器,只要提取出來就可以。首先在結果樹中選擇“正則測試器”,然後輸入正規表示式,提取token。如下圖所示:

5、從上邊可以看出來,巨集哥填寫的正規表示式可以成功提取到token,那麼巨集哥選中獲取token,右鍵新增正規表示式提取器然後將這裡測試的正規表示式複製到正則提取器中進行相關的配置。如下圖所示:

6、根據上邊思路,提取出來就要加入到屬性中,加入屬性中,巨集哥這裡使用後置處理器-BeanShell後置處理器,選中獲取token,右鍵新增BeanShell後置處理器,然後進行配置,新增指令碼。如下圖所示:

參考指令碼:

String token = bsh.args[0];
${__setProperty(newtoken,${token},)};
log.info("token:" + token);

7、將上邊BeanShell後置處理器的指令碼中,加入“log.info("token:" + token);” 這段程式碼然後在日誌中檢視是否獲取到token的值,巨集哥執行測試計劃指令碼後,檢視日誌(點選右上角黃色都有感嘆號的圖示),如下圖所示:

8、從上邊的日誌中我們清楚的發現沒有提取到token的值,巨集哥檢視正規表示式提取器發現匹配數字是-1,這裡有問題,將其修改成1,執行測試計劃,再次檢視日誌,如下圖所示:

9、從上圖發現,巨集哥已經提取到token的值到屬性中了,那麼就可以傳遞到其他執行緒組中呼叫這個token。然後繼續建立一個執行緒組,右鍵新增配置元件“HTTP Cookie管理器”,進行配置,如下圖所示:

10、右鍵新增取樣器“HTTP請求”,並重新命名為“檢視角色”進行配置,如下圖所示:

11、新增監聽器“察看結果樹”,如下圖所示:

12、儲存測試計劃指令碼,執行jmeter後,檢視結果樹(可以看到獲取到角色列表),如下圖所示:

好了,到此 jmeter之跨執行緒組傳遞引數,就已經完全實現了。

6.小結

巨集哥這裡就講解了一下,跨執行緒傳遞token,像cookie、session以及其他引數都是類似的,照貓畫虎即可。

相關文章