jmeter之准確並發



我剛開始也是走了很多彎路,網上也沒有具體的教程。
通過自己的發掘,終於嘗試的發現了一種方法,可能不是很專業,有什么錯誤的地方,還需大家提出,我也跟着學習學習。
下面以實戰的方式,為大家演練!
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、運行,查看結果成功

 

 

本文由檸檬班土豆老師原創,轉載需注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM