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