如果你想從頭學習Jmeter,可以看看這個系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
前言
- 用過 Jmeter 的同學應該都知道,Jmeter 不支持跨線程傳遞參數
- 哎,那我想跨線程傳遞參數,要咋整呢?別急,接下來我們就來講解如何不使用代碼就可以解決此問題
- 官方也有正式說明,所以這並不是 Bug 哦
一定要通過 BeanShell 去跨線程組傳遞參數嗎?
- 通過百度搜索:Jmeter 跨線程組傳遞參數
- 會看到很多文章都是通過 BeanShell 寫代碼去實現的
- 這對於代碼小白極其不友好!
- 所以這篇文章將教會大家如何不需要寫代碼去實現跨線程傳遞參數!
定義屬性法
思路
- 在Jmeter 中,屬性是全局生效的,可以動態設置
- 但變量是每個線程獨有的
- 所以通過設置屬性可以實現跨線程傳參,而不是通過變量的方式
測試計划結構樹
第一步
- 添加了三個線程組
- 登錄需要注冊接口返回的手機號
- 獲取訂單列表需要登錄接口返回的token,均需要跨線程組傳參
注冊接口的 Json 提取器
第二步:通過提取器(json、正則、xpath),提取需要跨線程組傳遞的值
注冊接口的 BeanShell 后置處理器
第三步
- 添加一個 BeanShell 后置處理器
- 添加一個 ${__setProperty()} 函數,按照圖片說明寫變量名
登錄接口的請求體
第四步
- 引用第三步在 BeanShell 后置處理器設置的變量名(phone)
- 通過 ${__P()} 來讀取對應的屬性值
第五步
運行腳本!就能發現可以跨線程組傳遞參數啦
登錄接口的 BeanShell 后置處理器
一樣的步驟,添加 token 屬性
獲取訂單列表的請求參數
獲取 token 屬性
查看屬性顯示
可以通過屬性顯示這個控件查看我們在 BeanShell 設置的兩個屬性名和對應的值(phone、token)
拓展一下
如果想在一個 BeanShell 設置多個屬性,可以這樣寫哦
每個函數之間用 ; 分開即可(建議分)
然后可以在屬性顯示中查看兩個不同的屬性都會生效
文件在轉接法
思路
一個線程組運行結果,存儲到文件,另一個線程組,通過csv讀取文件,然后再提取文件中需要的值,作為變量輸入
線程組結構樹
第一步
- 添加兩個線程組,寫好接口
- 注冊接口后面添加保存響應文件(在監聽器下面)
注冊接口下的保存響應到文件
第二步
- 設置保存文件的路徑和文件名
- 記得選項跟着我勾哦,不然生成的文件名就不是你指定的(test.json)
CSV 數據文件設置
第三步
- 在第二個線程組添加 CSV 數據文件設置
- 文件名:設置剛剛保存的路徑
- 分隔符:json 數據建議填\t ,可以根據自己的數據結構來定,能取出完整的數據就好了
看看read_phone 的數據是啥
一個 json 數據
登錄接口的請求體
第四步:接口正常引用 json 提取器的變量即可
登錄線程組的結果樹
這里需要注意一點
在真正的請求取樣器前面需要加一個調試取樣器,上圖可以看到第一個取樣器無法取到變量值的,因為提取器都是后置處理器
所以第二個線程組元件的執行順序會是
- csv 數據文件設置
- 調試取樣器
- json 提取器
- 登錄請求