測試背景:測試時,需要測試某個接口A的並發極限值。而這個接口A的一些參數依賴於其他接口B,B和A部署在一台機器上,依賴接口B不需要並發,以免影響目標接口A。
測試分析:在使用JMeter時,一個線程組下的接口,是受整個線程組的並發數控制的,所以這2個接口不能在一個線程組中。那么就要使用2個線程組來實現,不同線程組控制不同並發數。使用時,第2個線程組就需要調用第一個線程組的參數,問題點在這里。
解決辦法:需要使用jmeter自帶函數__setProperty來實現,成為全局變量。
解決步驟:1、線程組1中使用接口B,通過B的返回值,使用json提取器,獲取到對應的參數值。
2、參數通過“BeanShell 取樣器”,利用腳本,變成全局變量
3、下面的線程組使用“${__property(參數)}”來調用,這樣就傳遞給第2個線程組中的接口A了.
4、使用時,測試計划需要勾選:需要獨立運行每個線程組
具體實現截圖:
1、第一個線程組
①請求返回值是JSON格式,通過json提取器,獲取返回值中的字段。$代表返回值,$.data.token就是2層嵌套中的token值
②使用“BeanShell 取樣器”,把json提取器中獲得的這些值變為全局變量。JMeterUtils.setProperty("參數", "值") 全局變量賦值
里面使用的腳本是:
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("name","${token}");
JMeterUtils.setProperty("rname","${rtoken}");
2、第2個線程組,主要是調用,把原來調用時常用的${參數}改成“${__property(參數)}” 即可。
下面這個截圖中,參數名為name,即上面設為的全局變量name
寫在最后:開始也試過“BeanShell斷言” 來獲取變量。這個也是可以的,但在跑並發時,會有個別報錯的,沒有取到全局變量值。所以推薦使用“BeanShell 取樣器”
參考博客:https://www.cnblogs.com/VashGu927/p/7651150.html 和 https://blog.csdn.net/weixin_42596342/article/details/84673412