1. 程式人生 > >Jmeter系列(45)- 詳解 Jmeter 跨執行緒組取引數值的方法,免程式碼!

Jmeter系列(45)- 詳解 Jmeter 跨執行緒組取引數值的方法,免程式碼!

如果你想從頭學習Jmeter,可以看看這個系列的文章哦

https://www.cnblogs.com/poloyy/category/1746599.html

 

前言

  • 用過 Jmeter 的同學應該都知道,Jmeter 不支援跨執行緒傳遞引數
  • 哎,那我想跨執行緒傳遞引數,要咋整呢?別急,接下來我們就來講解如何不使用程式碼就可以解決此問題
  • 官方也有正式說明,所以這並不是 Bug 哦

 

一定要通過 BeanShell 去跨執行緒組傳遞引數嗎?

  • 通過百度搜索:Jmeter 跨執行緒組傳遞引數
  • 會看到很多文章都是通過 BeanShell 寫程式碼去實現的
  • 這對於程式碼小白極其不友好!
  • 所以這篇文章將教會大家如何不需要寫程式碼去實現跨執行緒傳遞引數!

 

定義屬性法

思路

  • 在Jmeter 中,屬性是全域性生效的,可以動態設定
  • 但變數是每個執行緒獨有的
  • 所以通過設定屬性可以實現跨執行緒傳參,而不是通過變數的方式

 

測試計劃結構樹

第一步

  1. 添加了三個執行緒組
  2. 登入需要註冊介面返回的手機號
  3. 獲取訂單列表需要登入介面返回的token,均需要跨執行緒組傳參

 

註冊介面的 Json 提取器

第二步:通過提取器(json、正則、xpath),提取需要跨執行緒組傳遞的值

 

註冊介面的 BeanShell 後置處理器

第三步

  1. 新增一個 BeanShell 後置處理器
  2. 新增一個 ${__setProperty()} 函式,按照圖片說明寫變數名

 

登入介面的請求體

第四步

  1. 引用第三步在 BeanShell 後置處理器設定的變數名(phone)
  2. 通過 ${__P()} 來讀取對應的屬性值

 

第五步

執行指令碼!就能發現可以跨執行緒組傳遞引數啦

 

登入介面的 BeanShell 後置處理器

一樣的步驟,新增 token 屬性

 

獲取訂單列表的請求引數

獲取 token 屬性

 

檢視屬性顯示

可以通過屬性顯示這個控制元件檢視我們在 BeanShell 設定的兩個屬性名和對應的值(phone、token)

 

拓展一下

如果想在一個 BeanShell 設定多個屬性,可以這樣寫哦

每個函式之間用 ; 分開即可(建議分)

 

然後可以在屬性顯示中檢視兩個不同的屬性都會生效

 

檔案在轉接法

思路

一個執行緒組執行結果,儲存到檔案,另一個執行緒組,通過csv讀取檔案,然後再提取檔案中需要的值,作為變數輸入

 

執行緒組結構樹

第一步

  1. 新增兩個執行緒組,寫好介面
  2. 註冊介面後面新增儲存響應檔案(在監聽器下面)

 

註冊介面下的儲存響應到檔案

第二步

  1. 設定儲存檔案的路徑和檔名
  2. 記得選項跟著我勾哦,不然生成的檔名就不是你指定的(test.json)

 

CSV 資料檔案設定

第三步

  1. 在第二個執行緒組新增 CSV 資料檔案設定
  2. 檔名:設定剛剛儲存的路徑
  3. 分隔符:json 資料建議填\t ,可以根據自己的資料結構來定,能取出完整的資料就好了

 

 

看看read_phone 的資料是啥

一個 json 資料

 

登入介面的請求體

第四步:介面正常引用 json 提取器的變數即可

 

登入執行緒組的結果樹

 

這裡需要注意一點

在真正的請求取樣器前面需要加一個除錯取樣器,上圖可以看到第一個取樣器無法取到變數值的,因為提取器都是後置處理器

所以第二個執行緒組元件的執行順序會是

  1. csv 資料檔案設定
  2. 除錯取樣器
  3. json 提取器
  4. 登入請求