執行緒組之間的JMeter傳遞變數

測試安Q發表於2018-12-12

執行緒組之間的JMeter傳遞變數

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

在開發高階JMeter指令碼時,很可能您將擁有多個執行緒組。每個執行緒組將執行不同的請求。

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

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

在JMeter中傳遞執行緒組之間的變數

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

使用JSONPath,我們提取特定鍵的值並將其儲存為JMeter變數。

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

執行緒組之間的JMeter傳遞變數

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

執行緒組之間的JMeter傳遞變數


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

執行緒組之間的JMeter傳遞變數

JSONPath查詢的值儲存為 first_url 。此變數只能在同一個執行緒組中訪問,我們可以透過使用獲取其值 ${first_url} 。現在,我們如何透過其他執行緒組訪問此變數?

答案是用於 BeanShell Assertion 將變數儲存為全域性屬性。透過這種方式,我們可以線上程組之間傳遞變數。

要新增BeanShell斷言,請右鍵單擊Test Plan> Add> Assertion> BeanShell Assertion

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

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

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

執行緒組之間的JMeter傳遞變數


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

執行緒組之間的JMeter傳遞變數

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

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

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

執行緒組之間的JMeter傳遞變數


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902459/viewspace-2284952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章