1. 程式人生 > >jmeter如何設置全局變量以及調用方法

jmeter如何設置全局變量以及調用方法

錯誤 提示 -s reat title src 窗口 表達 btn

當遇到如跨線程組調用變量等情況,需要設置全局變量。

1、打開函數助手

技術分享圖片

輸入需要的值然後點擊生成按鈕,或者直接使用${__setProperty(newuserid,${userid},)}的格式

技術分享圖片

設置局部變量userid和token為全局變量並在另一線程中調用,調用方式見下

技術分享圖片

${__property(變量名)}

業務場景
一、登錄系統後進行商品購買,進行做接口並發。

1、首先分了兩個線程組login、pay_buy_finish 如圖:

技術分享圖片

2、獲取接口A正則表達式提取的session_sid作為全局變量,login線程只運行1次。如圖:

技術分享圖片

3、把獲取的sid 作為全局變量傳遞給線程組pay_buy_finish 中的請求使用:如圖:

技術分享圖片

4、運行結果是這樣:
線程組login 運行1次

技術分享圖片
pay_buy_finish運行5次
4次錯誤結果:
技術分享圖片

1次正確結果:

技術分享圖片

線程組pay_buy_finish總共運行5次,其中4次取值都不正確,只有1次取值正確。 如果有同學知道原因的請留言!

「原創聲明:保留所有權利,禁止轉載」 2 個贊 TesterHome 為用戶提供「保留所有權利,禁止轉載」的選項。 除非獲得原作者的單獨授權,任何第三方不得轉載標註了「原創聲明:保留所有權利,禁止轉載」的內容,否則均視為侵權。 具體請參見TesterHome 知識產權保護協議。 共收到 10 條回復時間 點贊
技術分享圖片 北溟 #1 · 2017年08月15日 1 個贊

圖形界面沒關閉過的情況下,上次運行時的__setProperty會一直在,比如設置了屬性A=11;下次運行的時候初始A就=11,然後才是被重新賦值,看你的查看結果樹是在2個線程組下的,你可以把它拉到外面,看下login、pay_buy_finish的執行順序,如果是這個原因,可以把login改成setup的

技術分享圖片 Mr.W #2 · 2017年08月15日 作者技術分享圖片北溟 #1 回復

我在nogui 下運行也是如此,貌似和關閉圖形界面沒關系

技術分享圖片 神奇的小新 #3 · 2017年08月15日技術分享圖片
北溟 #1 回復

正好也解決了我的疑問 十分感謝!

技術分享圖片 神奇的小新 #4 · 2017年08月15日技術分享圖片Mr.W #2 回復

另外我還有一個問題想要請教:設置全局變量後,在其他線程組中可以使用使用__property獲取到該全局變量,可是該全局變量如何在beanshell中使用呢?

技術分享圖片 Mr.W 關閉了討論 08月15日 12:50 技術分享圖片 Mr.W 重新開啟了討論 08月15日 13:22 技術分享圖片 北溟 #7 · 2017年08月15日技術分享圖片神奇的小新 #4 回復

${__property (x)}也可以直接用在beanShell中的,但是就是簡單的替換,我覺得用props.get("x")會更加安全,否則x屬性值有特殊字符時,遇到一些邏輯處理可能就會有問題,比如字符串相加等,beanShell窗口最下面有說明的有哪些可以用的內置對象

技術分享圖片 神奇的小新 #8 · 2017年08月15日技術分享圖片北溟 #7 回復

setup中定義全局變量x,然後在其他線程組中beanshell裏直接使用${__property (x)}會報錯: Attempt to access property on undefined variable or class name ,使用props.get("x"),提示“ Undefined argument: x”

之前遇到過這個問題,我的解決方式是:在beanshell中設置參數:${__property(x)},然後在beanshell script中使用bsh.args[0]進行獲取,可是我不是很喜歡這種方式~~

技術分享圖片 北溟 #9 · 2017年08月15日技術分享圖片神奇的小新 #8 回復

props.get("x") 你這個報錯的話Undefined argument: x
檢查下是不是沒加引號?

技術分享圖片

技術分享圖片 神奇的小新 #10 · 2017年08月15日 技術分享圖片北溟 #9 回復

哈哈~~果真 tks!!!

技術分享圖片 神奇的小新 #11 · 2017年08月15日

謝樓主帖子!

jmeter如何設置全局變量以及調用方法