線程組之間的JMeter傳遞變量


下面,我們將看看如何在線程組之間共享和傳遞變量。

在開發高級JMeter腳本時,很可能您將擁有多個線程組。每個線程組將執行不同的請求。

一個很好的例子是我們需要使用Bearer Tokens對用戶進行身份驗證。一個線程組執行身份驗證並保存令牌。另一個線程組需要訪問此令牌並在另一個請求中使用它。

因此,我們需要一種在線程組之間傳遞變量的機制。

在JMeter中傳遞線程組之間的變量

對於此示例,我們的測試計劃將具有兩個線程組。第一個線程組向Web服務發出GET請求。然後,我們使用JSON Extractor插件來解析JSON響應。

使用JSONPath,我們提取特定鍵的值並將其保存爲JMeter變量。

這就是我們的JMeter請求的樣子:


上述請求的結果以JSON格式生成以下響應



和我們的JSONPath提取第一個url看起來像


JSONPath查詢的值保存爲first_url。此變量只能在同一個線程組中訪問,我們可以通過使用獲取其值${first_url}。現在,我們如何通過其他線程組訪問此變量?

答案是用於BeanShell Assertion將變量保存爲全局屬性。通過這種方式,我們可以在線程組之間傳遞變量。

要添加BeanShell斷言,請右鍵單擊Test Plan> Add> Assertion> BeanShell Assertion

在我們的BeanShell斷言中,我們可以輸入以下代碼

${__setProperty(first_url, ${first_url})};

現在在線程組2中,我們可以使用${__property(first_url)} 如下所示直接訪問此變量:



或者,我們可以使用BeanShell PreProcessor來操作變量


在BeanShell PreProcessor中,我們可以通過使用來訪問從另一個Thread組傳入的變量props.get("name_of_variable") 。然後我們可以執行一些String操作並將結果保存爲新變量。

在上面的例子中,我們http:// 從Thread Group 1傳遞的變量中刪除了,我們將結果保存爲變量host。

該變量host 現在是線程組2的本地變量,並使用${host} 如下所示直接訪問它:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章