Jmeter5.0 搶紅包併發操作案例
-
環境搭建
Java下載地址:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
JMeter是基於java的開發的工具,因此需要使用JMeter必須要安裝java。
JMeter下載地址:
http://jmeter.apache.org/download_jmeter.cgi
mysql-connector-java-version(版本號).jar下載地址:
https://mvnrepository.com/artifact/mysql/mysql-connector-java
jar是maven倉庫裡的JDBC(Java DataBase Connectivity)驅動,需要該驅動才可以正常通過JDBC來連線mysql的資料庫
JMeter在開啟頁面的【Options】-【Choose language】-【Chinese(simplified)】可以進行漢化操作。(但是該操作是一次性的,每次重新開啟又預設了英文)
JMeter開啟後預設漢化操作:
在bin資料夾找到jmeter.properties開啟後,在#language=en 的下一行加入language=zh_CN 儲存即可。
開啟Jmeter,在bin檔案下找到jmeter.bat。點選即可開啟:
若需要連線mysql資料庫,則需要裝驅動,裝好驅動之後,如下圖,瀏覽導進jar的驅動包:
(每個mysql版本不一樣對應的驅動不一樣,下載驅動地址請見文中頭部)
1. 建立執行緒組【執行緒(使用者)--執行緒組】
開啟後即可看到一個測試計劃,在測試計劃右鍵可以建立一個執行緒組,
執行緒組 各常用欄位解析:
名稱:給執行緒去名稱,例如:搶紅包
註釋:對該執行緒的作用進行描述
在取樣器錯誤後要執行的動作:一個執行緒裡(Sample)取樣器可能存在多個,就是錯誤時的處理,參考字面意思。
執行緒數: 可以理解為執行的使用者數。例如設定10則10個使用者去執行
Ramp-Up時間:所有使用者跑完執行緒的總時長,單位為秒。例設定1 則1s執行完10個使用者
迴圈次數:使用者數的迴圈執行次數。 把永遠打鉤就一直迴圈
排程器配置: 當迴圈次數勾選永遠時,可以通過排程器配置時間來限制在哪一個時段執行。
2. 配置JDBC Connection Connection Configuration【執行緒組右鍵—新增—配置元件--JDBC Connection Connection Configuration】
JDBC(Java DataBase Connectivity)是用來與我們們資料庫做連線的配置,我們需要配置JDBC來連線到資料庫,才能從資料庫裡取得相關的資料,並設定為變數。
而連線資料庫的前置條件時需要拿到相關資料庫的驅動,才可以正常取連線資料庫的資料,那麼在測試計劃的jar包已加入mysql-conncetor-java-8.0.11.jar後即可正常驅動。
(我的mysql版本為5.7.24) 查版本語句:select version();
以下為JDBC Connection Configuration 各常用欄位解析:
Variable Name for created pool:變數名稱,這個是一定要填寫,後面使用JDBC request時,根據這個變數名來找對應的配置。JDBC request設定Variable name時要與該變數名一致。
Connection Pool Contiguration
Max Number of Connections:最大連線數(資料庫)這裡預設設定為0,表示這個資料庫的連線池只提供給該執行緒使用。
Max Wait(ms):連線池取回連線最大等待時間。這裡預設時10000ms則10s內如果拿不到資料則會報錯。
……….中間一部分引數有興趣檢視:https://blog.csdn.net/u013258415/article/details/78316931
Database Connection Configuration:
Database URL:jdbc:mysql://ip:埠/資料庫名稱
(這個是連線mysql時的寫法,jdbc:mysql://為固定格式,ip是資料庫的連線地址,埠是資料庫的埠,資料庫名稱是對應要連線的資料庫名稱)
JDBC Driver class: com.mysql.jdbc.Driver
驅動,連線mysql就是匹配該驅動。
Username: 連線資料庫的賬號
Password:連線資料庫的密碼
3. 配置JDBC Request【執行緒組右鍵--新增—取樣器—JDBC Requset】
JDBC Request配合以上的JDBC Connection Configuration使用可以通過SQL語句拿到資料庫中所需的資料並設定為變數
以下為JDBC Request 各常用欄位解析:
Variable Name of Pool declared in JDBC connection Configuration: mysql
(這個值是對應之前設定的Variable Name for created pool的值) 意思是連線到該資料庫。
SQL Query
Query Type: Select Statement 預設的就是查詢語句
在查詢框輸入你需要查詢的SQL語句
Variable names: openid (這個是設定的變數值,根搜尋出來的按順序給變數值,若有兩個欄位,則給兩個變數值,以英文逗號隔開即可,例如: name,psw)
設定了該變數後,如果要使用從資料庫拿到的第一個資料則使用:openid_1
要使用第二條資料則使用:openid_2
那麼問題來了,如果我想這個1,2,3每條資料都變成自動遞增疊加怎麼處理?請接著往下看吧。
4. 新增察看結果樹【執行緒組右鍵--新增—監聽器—察看結果樹】
在檢視結果樹之前先來看看以下的幾個按鈕:
表示執行執行緒組
單個的掃帚表示清除所選的某個請求資料,兩個掃帚的表示清除掉所有的請求。
那麼在察看結果樹之前,需要執行後才有結果。
察看結果樹 各常用欄位解析:
主要看框出來這一部分內容:
Text 是以文字型別展示結果。還可以選擇其他的型別
JDBC Request 一共是10個請求,因為我們設定執行緒組的時候,設定的執行緒數為10,所以會有10條請求。
點選其中一條請求,右邊會出現取樣器結果,請求,響應資料。
取樣器結果: 伺服器返回的一些訊息
請求(Request Body):這裡是SQL的語句,這個一般是檢視HTTP請求請求引數是否正確。
(Request Headers) 響應頭部
響應資料(Request Body):為請求資料庫時返回的資訊。這個一般檢視伺服器或資料庫返回的資訊。
(Request Headers) 響應頭部
除此之外,也可以通過表格檢視結果
【用表格檢視結果】 【執行緒組右鍵--新增—監聽器—用表格察看結果】
以下為【用表格察看結果】 各欄位解析
Sample# 序列號,執行緒使用者有幾個序列號就會有幾個
Start Time 使用者進入開始的時間,精確到毫秒
Thread Name 執行緒名稱,每個使用者有對應的執行緒名稱
Label HTTP請求的名稱
Sampler Time 執行這個使用者所花的時間。單位為毫秒
Status 執行的狀態,正常的就是安全符號,異常就是打X
Bytes 請求響應的檔案大小
Send Bytes 傳送請求的資料包大小
Latency 延遲時間
Connect Time 連線到伺服器消耗的時間
那麼一共能在資料庫中請求到多少條資料,我們可以新增一個Debug Sampler來去檢視。
【執行緒組右鍵—新增—取樣器—Debug Sampler】 (要是不用了也可以右鍵禁用)
如下圖,一共能拿到資料庫中的50條資料。
5. 新增計數器【執行緒組右鍵—新增—配置元件—計數器】
計數器是為了讓第三步驟中的openid_1, openid_2, openid_3的中的1,2,3資料進行自動疊加,設定為變數,以引數的形式進行傳輸。
Starting value: 開始迭代的數值 設定為1則是以資料庫的第1個值開始取
遞增: 設定為1 則是在每次迭代後給計數器數值+1
Maximum value:最大值,如果超過最大值,則重新設定為開始迭代的數值,預設的最大值為263-1
Number format:數值格式,預設的話為0。若你給01的話 格式就是01,02,03
引用名稱:這裡就是設定一個變數,要用到計數器時,可以用這個變數去代替。例如我這裡設定的是index,那麼使用格式就為:${index}
(那麼我們有計數器了 上面原先的值是openid_1,opened_2,opened_3則可以使用openid_${index}來代替了,目前這裡就實現了數值自動疊加計算,但是你以為這樣就可以使用了嗎?不,除了迭代起來,還需要使用_V函式來始得迭代的變數值是可用的。請繼續看下文的_V函式設定迭代變數)
6. 函式助手中的__V函式使用【選項—函式助手對話方塊】
各函式功能可參考 http://www.cnblogs.com/imyalost/p/6802173.html
選擇一個功能 選擇__V
函式引數:
Name of variable(may include variable and function references) 值就是填寫JDBC Connection Configuration裡的變數名稱_${計數器設定的變數名稱},即填寫 openid_${index}
然後點選生成:${__V(openid_${index},)}
生成後,先拷貝這個變數。這個變數也就是會去把資料庫中的所有openid依次進行代入。
很多時候,我們未登陸時是無法去搶紅包的,很多時候搶紅包的介面都需要在請求的頭部帶token,而這個token往往是登陸的時候才會獲取到,因此token的話需要使用正規表示式去拿,再設定為變數。這一塊暫時不深究,因為目前公司的token是用的openid,這樣的話會省去很多的步驟,但是這樣也會存在安全隱患,後期要是有隨機token產生,再研究這一塊的內容。以下內容則是以token=openid進行演示
7. 新增HTTP資訊頭管理器【執行緒組右鍵—新增—配置元件—HTTP資訊管理器】
HTTP資訊頭管理器,這個是用來放請求頭部資訊需要攜帶的內容,比如:token,cookie等。
那麼以token=openid為例的話:
新增—>名稱為 token
值:${__V(openid_${index},)} (這裡會遍歷資料庫的每一個openid)
若HTTP請求頭部還有其他資訊,可以繼續點選新增。輸入對應的名稱和值即可。
8. 新增HTTP請求 【執行緒組右鍵—新增—取樣器—HTTP請求】
以下為【HTTP請求】 各常用欄位解析
名稱:預設是HTTP請求,當然最好取一個見名知意的名稱。(其他HTTP資訊管理頭,計數器以及以上所有的等都可以改一個見名知意的名稱)
註釋:不解釋
Web伺服器
協議: 一般是http 和 https (似乎不填也不影響)
伺服器名稱或IP : 請求目標伺服器名稱或IP地址
埠號: 目標伺服器的埠號,預設值是80
方法:http的請求方法 常用的有GET、POST
路徑:請求的介面指定路徑
內容編碼:表示可支援的編碼內容 例如 utf-8
引數:GET請求傳參時,點選新增,把引數名填寫在名稱列,把對應引數值填寫在值列。多個引數時,新增多個即可。
例如:這裡的openid是以變數的形式傳入,也就是依次從資料庫拿到的openid。
而兩一個則是紅包的id,這個紅包的id也可以通過資料庫去獲取,直接拿到該紅包的id,然後拷貝進去即可。
9. 新增聚合報告【執行緒組右鍵—新增—監聽器—聚合報告】
以下是執行後的結果:
Average : 執行所有使用者所花的平均時間,單位為毫秒
Median: 中位數,表示50%使用者的響應時間小於多少毫秒
90% 95% 99% Line: 意思同上同上。
Min /Max: 執行所有使用者中的消耗時間最小/大的
Error% : 錯誤事務率
Throughtput : tps吞吐量,表示每秒完成的請求數
KB/Sec : 每秒從伺服器接收到的資料量
10. 匯出測試報告(cmd匯出測試報告)
cmd 進入到jmeter的bin目錄,輸入以下命令:
jmeter -n -t D:\Jmeter\apache-jmeter-5.0\bin\搶紅包的案例.jmx -l C:\Users\DELL\Desktop\搶紅包.log -e -o C:\Users\DELL\Desktop\搶紅包Report
命令中引數詳解:
-n 全稱 non-gui模式,非介面模式執行
-t 全稱 testfile 需要執行的測試檔案指令碼
-l 全稱 logfile 需要儲存的log檔案路徑
-e 生成報告檔案
-o 儲存報告的地址
分別有三個路徑。第一個路徑是我們執行.jmx,也就是我們儲存好的案例的路徑,第二個路徑是儲存執行時的儲存日誌檔案路徑,第三個路徑是匯出測試報告儲存的資料夾路徑
執行完之後桌面會生成一個log檔案和一個報告的資料夾
進入搶紅包Report資料夾:
點選index.html即可看到測試報告:
相關文章
- 高併發-「搶紅包案例」之一:SSM環境搭建及復現紅包超發問題SSM
- 微信小程式搶紅包高併發設計微信小程式
- 搶紅包案例分析以及程式碼實現
- 搶紅包案例分析以及程式碼實現(三)
- 搶紅包案例分析以及程式碼實現(二)
- 搶紅包案例分析以及程式碼實現(四)
- Android 輔助功能 -搶紅包Android
- 2020-12-28 搶紅包
- 拼多多在哪裡可以搶紅包?紅包如何使用呢?
- Android 輔助功能 -搶紅包(二)Android
- Android 輔助功能 -搶紅包(三)Android
- Java 併發包原子操作類解析Java
- 開發微信搶紅包軟體被罰475萬!
- L2-009 搶紅包【模擬】
- 2018 新年活動系統 — 搶紅包
- Python教你全自動搶微信紅包Python
- C#實現搶紅包演算法C#演算法
- 如何設計一個搶紅包系統
- 處理高併發 IO瓶頸解決紅包程式
- Redis秒殺實戰-微信搶紅包-秒殺庫存,附案例原始碼(Jmeter壓測)Redis原始碼JMeter
- 模擬微信搶紅包demo,生成隨機數隨機
- 基於 Redis 實現基本搶紅包演算法Redis演算法
- 從Android手機的搶紅包外掛說起Android
- 建立併發包
- 關於年會搶紅包遊戲的一個思考遊戲
- 限量紅包封面開搶啦!祝你兔年好運連連
- Laravel 高併發搶購模擬Laravel
- Go 併發操作Go
- 小程式如何發紅包
- Redis秒殺系統架構設計-微信搶紅包Redis架構
- golang實現二倍均值演算法和搶紅包Golang演算法
- Java併發---concurrent包Java
- Python這麼頂?搶紅包殺手、訊息撤回也沒得用!Python
- Java併發包之 CopyOnWriteArrayListJava
- 1808億次,16倍的超越!談支付寶紅包的高併發挑戰
- 微信:除夕夜使用者搶微信紅包50.8億個
- 快過年了,如何使用 AutoJS 自動化快速搶微信紅包!JS
- 吸粉紅包驚現-會吸粉的紅包,才是好紅包!