史上最簡單的 Jmeter 跨執行緒組取引數值的兩種辦法 (不寫程式碼)
阿新 • • 發佈:2021-08-28
如果你工作中已經在用 jmeter 做介面測試,或效能測試了,你可能會遇到一個麻煩,哪就是 jmeter 的變數值不能跨執行緒組傳遞。
看,官方就已經給出瞭解釋。這個不是 jmeter 的缺陷,這是 jmeter 的設計使然的。如果變數在開始測試之前已經確定了,我們可以用引數化關聯就可以實現。但是如果值時動態生成,每迴圈一次,值就變化一次,那麼怎麼弄呢?
此時,你可能就會去百度了,對嗎?你會發現,很奇怪,機會所有的百度結果都千遍一律的告訴你用 Beanshell***,寫上一些不知所云的程式碼。如果你不懂 Java,你看這著這開始寫程式碼了,而且還寫著一些晦澀難懂的東西,你是不是已經開始頭痛了。
如果是這樣,那你就繼續往下看,我來教你兩手。兩種方法,輕輕鬆鬆搞定,你都不用寫些哪啥都不懂的程式碼。《測試面試寶典》
方法一:定義屬性法
**思路:**jmeter 中,屬性是全域性的,是可以動態設定的;而變數是獨屬於每個執行緒的
- 第一步:我們在 jmeter 中,新增兩個執行緒組
- 第二步:在第一個執行緒組中,呼叫一個介面,提取你想要的值儲存到一個變數中
- 第三步:在第一個執行緒組中,新增一個 Beanshell 後置處理器,然後再開啟選單欄中的 Tools -> 函式助手對話方塊(Function Helper Dialog),在彈窗中,選擇__setProperty()函式,表示式第一個值輸入將要存放的屬性名稱(英文)
- 第四步:在第二個執行緒組中,新增一個‘使用者引數’,新增變數(Add variable),設定變數名稱,再次開啟函式助手,選擇__P 函式,在函式的第一個 value 值文字框中輸入 ${第三步設定屬性名稱},生成函式,複製函式,關閉彈窗,把它貼上到新增的變數的值文字框中
- 第五步:在第二個執行緒組中,介面引數使用定義的變數 ${變數名稱}
這樣,就實現了跨執行緒組之間傳遞引數。是不是,很簡單。It's so easy!
**注意:**如果想要設定多個屬性,可以在第三步的時候,貼上多個函式,修改函式中屬性名稱和變數名稱,每個函式之間用英文';'分開。
如果這你都覺得難了,不要灰心,繼續往下看,我再教你一個更容易理解的方法。
方法二:檔案轉接法
**思路:**一個執行緒組執行結果,儲存到檔案,另一個執行緒組,通過 CSV 讀取檔案,然後再提取檔案中需要的值,作為變數輸入
- 第一步:在 jmeter 中,新增兩個執行緒組
- 第二步:在第一個執行緒組中,呼叫介面,然後新增監視器-> 儲存響應到檔案,設定儲存檔案的路徑和檔名字首
- 第三步:在第二個執行緒組中,新增一個 CSV 資料檔案設定(csv set data config),檔名設定為第二步中,設定的儲存檔案路;變數名稱自行定義;分隔符設定為'\t'(為什麼這個地方要用\t,留個作業,請大家思考吧)
- 第四步:新增正則表示式提取器(或 JSON 提取器),apply to 選擇'Jmeter variable Name to use',然後輸入 CSV 讀取檔案設定的變數名;再編寫正則提取式
《測試面試寶典》
- 第五步:在第二個執行緒組中,新增介面,使用正則提取器中的變數名稱
至此,檔案轉接法完成。
是不是兩種方法都相當簡單,都沒有去寫晦澀難懂的程式碼!而且都實現了跨執行緒組傳參取值。