作業中應用場景:
A執行緒組里面的一個輸出,是B執行緒組里面的一個輸入,如果B執行緒想參考A執行緒的變數,就必須設定全域變數,例如你想在A介面中拿到它回傳的某個值(常用的就是登陸后的token),此時你想在B中參考它,就需要將它設定成全域變數,在其他執行緒組中也可以用,
想法:
1.使用正則運算式或者json提取器,在A執行緒組中提取到你想要傳遞的引數,
2.使用函式setProperty將其匯入到BeanShell后置處理(或者BeanShell處理器)
3.在B執行緒組中,使用property函式(或者P函式)去參考從A執行緒組中傳遞來的引數
一、我想拿到介面回傳的 "title": "魷魚游戲"時它的id值(這里是要取這個title對應的其它欄位的值)
此時可以使用JSON提取器,設定的內容如下:

解釋一下JSON提取器里面的引數意思:
names of created variables :接收值的變數名,多個變數時用分號分隔
json path:json path運算式,也是用分號分隔
match no:0隨機;n取第幾個匹配值;-1匹配所有,后續參考用 變數名_N 取第N個值,
default values:預設值,匹配不到值的時候取該值
例子中的值:
names of created variables :ID
json path:$..[?(@.title=='魷魚游戲')].["id"]
match no:1
二.將獲取到的變數值,通過setProperty函式將變數值通過BeanShell后置處理(或者BeanShell處理器)傳遞到公共空間去,
Ctrl+shift+f1快捷鍵打開函式助手或者點擊
找到setProperty函式:

接著將所生成的函式值:${__setProperty(newID,${ID},error)}
添加到1.BeanShell 后置處理程式中的Script下:

2.也可以添加到BeanShell 取樣器的腳本下:

其實后面熟悉了,或者記住了在上述的BeanShell后置處理(或者BeanShell處理器)中添加的函式setProperty的取值:
${__setProperty(全域變數名,${A執行緒組獲取的變數值},error)}
三、使用property函式(或者P函式)將二中的全域變數引入
1.也是去函式助手中找到property函式:

將復制到的函式值,去到B執行緒組中去參考:

2.或者使用P函式

將復制到的函式值,去到B執行緒組中去參考:

后面熟練了這兩個函式就可以直接使用,而不要通過函式助手:
1.${__property(全域變數名,,error)}}
2.${__P(newID,)}
四、備注
1.因為此次是為了獲取這個屬性值 "title": "魷魚游戲"時它的id值,所以json提取器中的運算式是使用:
$..[?(@.title=='魷魚游戲')].["id"],
如果只是為了獲取"title": "魷魚游戲",魷魚游戲這個值-----$.subjects.[1].title
我們怎么知道自己寫的json的提取器的方法對不對,可以使用jmeter在回應中自帶的JSON Path Tester自帶的工具,按下圖寫入,點擊Test即可

2.之前在解釋JSON提取器中的引數解釋時:
match no:0隨機;n取第幾個匹配值;-1匹配所有,后續參考用 變數名_N 取第N個值,
例如設定如下:
names of created variables :title
json path:$.subjects.*.title
match no:-1

其中$.subjects.*.title,獲取的是全部的title值,就代表它是有多個值:

此時你如果只想使用陣列組中第二個值,即 "title": "魷魚游戲",
那么你在你所需要用到這個變數的地方:title_2,即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321185.html
標籤:其他
