我剛開始也是走了很多彎路,網上也沒有具體的教程。
通過自己的發掘,終於嘗試的發現了一種方法,可能不是很專業,有什么錯誤的地方,還需大家提出,我也跟着學習學習。
下面以實戰的方式,為大家演練!
1 如下圖,找到了一個接口,現在想讓這個接口並發為50,持續一分鍾
線程組設置如圖:
注意:如果你這樣設置了,就去跑的話,你會發現並發很大,根本不是50並發
為什么會這樣呢?
這里我把線程組里面的幾個參數給大家理理
1 線程組:我們直接可以理解為多少個用戶—— 一般和你的並發數相等
2 Ramp-ups時間:規定時間的跑完所有請求
3 循環次數:線程組循環多少次——你設置線程組為50,循環10次,就會有500個請求
如圖上我所設置的,Ramp-up時間為1,他就會1s內,跑完所有所有請求。
然而我設置的循環次數為——永久
所有請求=循環次數線程數 :所以這個數是無窮大的
我們JMter就會1s內能跑多少就跑多少
*那我們怎么辦呢?
**2 下面為大家說一下,我走過的第一個彎路,我的設置如下
根據我上面所說的:
這樣設置的話,它是不是會在(Ramp-up時間)60s跑完(線程組)50*循環次數(60)個請求,這樣是不是50並發/s
理想狀態這種方法是可以的,但是你可以吧線程組設置成1,並發60s試試,你會發現JMeter根本不會聽你的,他幾秒就跑完了,說明這種方法是不准確的。
3 准確的吞吐量定時器
通過自己的嘗試,發現了這個准確的吞吐量定時器,顧名思義,這個就是控制吞吐量的
像以上圖這樣設置的情況下,我們無法控制並發,但是能控制時間
准確的吞吐量定時器 能控制並發,添加在接口下面,如圖
4 查看是否達到效果
達到了效果,這里jmeter會有一點偏差,我個人覺得是正常的,因為JMter也是軟件,你要他准確控制它1s為多少並發,沒有一點偏差,我覺得不太現實。當然少數並發還是可以控制住的。你可以試試10並發,壓60s,結果還是准確的。
因為項目的原因,假設我們要實現如下要求:從數據庫的用戶表里獲取用戶信息,並作為參數全部傳遞給登錄請求,分別完成登錄操作。
01
Jmeter連接數據庫
1、添加JDBC Connection Configuration
(右鍵測試計划-->配置元件-->JDBC Connection Configuration)
2、配置數據庫連接信息,其中
DataBase URL:
jdbc:mysql://192.168.88.130:3306/dataname?useUnicode=true&characterEncoding=utf-8
1)192.168.88.130:3306為數據庫的地址和端口號;dataname為數據庫名
2)useUnicode=true&characterEncoding=utf-8 指定字符的編碼解碼格式utf-8
JDBC Driver Class :
com.mysql.jdbc.Driver 此為mysql數據庫的驅動
Username: 數據庫的登錄用戶名
Password: 數據庫的密碼
3、導入mysql驅動包
下載好mysql的驅動包(mysql-connector-java-5.1.7-bin.jar),
放到jmeter的lib目錄下
選中測試計划,添加mysql驅動包
02
添加Jdbc請求
添加jdbc請求並設置變量
1、添加線程組-->右鍵線程組-->添加jdbc request,並做好設置
2、添加Debug PostProcessor用於查看變量phone值的獲取,添加查看結果樹並運行;得到以下結果。
說明jmeter發起的jdbc請求及變量設置正常
03
循環讀取庫的用戶信息
實現循環讀取庫的用戶信息,並傳遞到下一個登錄請求
接下來就要思考怎么將查庫得到的用戶手機號,作為參數傳遞給下一個登錄請求。
這里需要引用到 ForEach控制器
1、添加ForEach控制器(右鍵線程組-->邏輯控制器-->ForEach控制器),並先嘗試如下設置
輸入變量的前綴:phone;
從之前的jdbc request設置的變量得知,我們要取的值為phone_1、phone_2、phone_3......,所以這里輸入phone
Start index for loop:0;
變量循環啟動的索引,第一個元素起始索引+1
End index for loop:6;
變量循環結束的索引。
所以這里是取值phone_1、phone_2、...、phone_6
輸出的變量名稱:t_phone;
用於替換循環下的請求的變量
2、在ForEach控制器下添加登錄請求,並進行變量引用
3、運行后,查看結果,成功從庫里獲取了前6個用戶手機號,並分別成功登錄
以上這種處理需要自行查庫獲知總共有多少個用戶,再去設置ForEach控制器的End index for loop值(設置為用戶總數),就可以將庫里所有用戶進行參數傳值登錄了;
問題:能不能jmeter自動去獲知數據庫表的用戶數,然后去循環取值進行登錄呢?
當然可以,先用jdbc request查出用戶數,再直接對ForEach控制器的End index for loop值進行設置就ok了
實操:
a、添加一個jdbc請求,查詢用戶表的用戶總數,並設置變量count
b、設置ForEach控制器的End index for loop值
c、運行,查看結果成功
本文由檸檬班土豆老師原創,轉載需注明出處!