學習目標?
瞭解Jmeter相關概念php
掌握Jmeter的安裝搭建html
掌握JDBC壓力測試java
掌握HTTP壓力測試linux
掌握DUBBO RPC壓力測試git
掌握分佈式壓力測試程序員
Jmeter快速入門安裝部署
什麼是Jmeter?
Meter也稱爲「Apache JMeter」,它是一個開源的,100%基於Java的應用程序,帶有圖形界面。 它旨在分析和衡量Web應用程序和各類服務的性能和負載功能行爲。github
JMeter主要用於測試Web應用程序或FTP應用程序,但目前,它適用於功能測試,JDBC數據庫鏈接,Web服務,通用TCP鏈接和OS本機進程。 您能夠執行各類測試活動,如性能,負載,壓力,迴歸和功能測試,以便針對您的Web服務器得到準確的性能指標。web
JMeter最初是由Apache軟件基金會的Stefano Mazzocchi編寫和開發的。 它主要用於測試Apache JServ(目前稱爲Apache Tomcat項目)的性能。Apache從新設計了JMeter以加強GUI,增長更多功能和功能測試功能。ajax
JMeter不是一個瀏覽器,它不像任何瀏覽器那樣呈現html頁面,而是在協議級別上運行。 如下是JMeter支持的協議列表:正則表達式
- Web Services - SOAP / XML-RPC
- Web - HTTP, HTTPS sites ‘web 1.0’ web 2.0 (ajax, flex 和 flex-ws-amf)
- 經過JDBC驅動程序的數據庫
- 目錄 - LDAP
- 經過JMS面向消息傳遞的服務
- 服務 - POP3, IMAP, SMTP
Web服務器包含大量應用程序和用戶,所以有必要知道Web服務器處理同時訪問用戶或應用程序的能力。 例如; 當許多用戶同時訪問網站時,網站服務器將如何執行 - 基本上要使用JMeter等性能測試工具進行性能測試。
Jmeter工做流程
JMeter經過模擬一組用戶將請求發送到目標服務器。 隨後,收集數據以經過各類格式計算目標服務器的統計和顯示性能度量。以下圖:
Jmeter安裝步驟
咱們假設您已在計算機上安裝了「jdk 1.6」或更高版本,併成功配置了運行和編譯java程序所需的環境變量。
可是,要驗證您的系統上是否安裝了Java。打開控制檯並根據您正在使用的操做系統執行如下java命令
JMeter的最新版本可從如下網址下載: http://jmeter.apache.org/download_jmeter.cgi
有兩種版本的JMeter可用。 可根據您使用的操做系統下載。
操做系統 | 下載文件 |
---|---|
JMeter的Linux/Unix的版本 | apache-jmeter-xx.xx.tgz |
JMeter的Windows的版本 | apache-jmeter-xx.xx.zip |
下載JMeter後,須要在方便的目錄中提取文件。下圖顯示了提取後的目錄和文件的結構 (這裏放在目錄:D:\app\apache-jmeter-5.3)
<img src="https://i.loli.net/2020/05/29/ReEkZrFnuc82SI7.png" alt="image-20200529203327975" style="zoom: 67%;" />
要以GUI模式啓動JMeter - 轉到bin
目錄(即:D:\app\apache-jmeter-5.3\bin),而後根據您使用的操做系統雙擊相應的可執行文件。 例如:
- Windows系統,點擊:jmeter.bat 文件。
- Linux/Unix系統,點擊:jmeter.sh 文件。
下圖顯示了默認Apache JMeter界面 -
<img src="https://i.loli.net/2020/05/29/zt2jXSF6gykJfxG.png" alt="image-20200529203559656" style="zoom: 50%;" />
JMeter目錄結構
- bin:該目錄包含啓動和執行其餘JMeter操做的可執行文件。
- docs:該目錄包含用戶指南。
- extras:該目錄包含各類使用樣例,例如,經過JMeter和bean shell腳本調用Apache Ant構建工具。
- lib:該目錄包含JMeter所需的JAR包(也能夠添加其餘的JAR包,而後在JMeter裏使用,這部份內容將在後面介紹)。
- printable_docs:這裏面是一些可打印的文件。
<img src="https://i.loli.net/2020/05/30/E5NhFYpqDbyWfr7.png" alt="image-20200530202816617" style="zoom:50%;" />
錄製第一個測試腳本
JMeter內置了一個測試腳本錄製器,用於錄製測試計劃,測試腳本錄製器也稱做代理服務器。一旦設置成功,測試腳本錄製器將會觀察你在網站上的各類操做,爲它們建立測試請求樣本,並最終存儲在你的測試計劃(即JMX文件)中。
此外,有些重要測試場景的錄製很是困難,因此JMeter提供了另一種手動建立測試計劃的方式。使用代理錄製器錄製測試腳本只須要花不多的時間,這將節約大量的時間。 爲了錄製第一個測試,咱們將錄製用戶一般訪問JMeter官方網站的過程。爲了使代理服務器可以觀察到你的動做,須要配置代理服務器。主要分爲以下兩步。 (1)配置JMeter的HTTP(S)測試腳本錄製器。 (2)配置瀏覽器使用的代理。
一、 配置JMeter的HTTP(S)測試腳本錄製器
第一步是配置JMeter的代理服務器。整個過程分爲如下步驟。
(1)啓動JMeter。 (2)右擊Test Plan,選擇Add→Threads(User)→Thread Group,添加一個線程組。
<img src="https://i.loli.net/2020/05/30/OPR14rWNyevlo6F.png" alt="image-20200530214232261" style="zoom:50%;" />
(3)右擊Test Plan,選擇"Add→Non-Test Elements→HTTP(S) Test Script Recorder",添加HTTP測試腳本錄製器。
<img src="https://i.loli.net/2020/05/30/RH6jPZIJghoUzry.png" alt="image-20200530214409611" style="zoom:50%;" />
(4)修改端口號爲7000(在Global Settings下面)。
<img src="https://i.loli.net/2020/05/30/6ZaSdqTgBy78efK.png" alt="image-20200530214503965" style="zoom:50%;" />
(5)在Test plan content部分,從Target Controller下拉框中選擇選項Test Plan>Thread Group。從Grouping下拉框中選擇Put each group in a new transaction controller。
<img src="https://i.loli.net/2020/05/30/m9Wjb6DAOIPYK2r.png" alt="image-20200530214955744" style="zoom:50%;" />
(6)單擊Add suggested Excludes(在URL Patterns to Exclude下)。
<img src="https://i.loli.net/2020/05/30/IFc8EXoJT6beY3H.png" alt="image-20200530215401823" style="zoom: 38%;" />
(7)修改網絡代理,win10系統**「打卡網絡與Internet設置」**。
<img src="https://i.loli.net/2020/05/30/3znqKfMcVmFUrkw.png" alt="image-20200530220107315" style="zoom: 50%;" />
(8)啓動錄製。
<img src="https://i.loli.net/2020/05/30/FtDsze239BTAVlU.png" alt="image-20200530220356220" style="zoom:50%;" />
(9)打開瀏覽器瀏覽網頁(此處訪問https://jmeter.apache.org),隨便訪問那個網站均可以,隨便點擊連接。
<img src="https://i.loli.net/2020/05/30/HnrxMjLSw1Yu4vE.png" alt="image-20200530220549251" style="zoom:50%;" />
(10)中止錄製。
<img src="https://i.loli.net/2020/05/30/woNzZRDvTb3lWeP.png" alt="image-20200530220839357" style="zoom:50%;" />
(11)查看錄製記錄。
<img src="https://i.loli.net/2020/05/30/YepdZkXhj7Df6Ux.png" alt="image-20200530220935933" style="zoom:33%;" />
二、運行錄製腳本
(1)添加監聽器Graph Results監聽器、一個View Results Tree監聽器和一個Aggregate Report監聽器。
<img src="https://i.loli.net/2020/05/30/Qd7g1RN6Hn5mSPF.png" alt="image-20200530221358878" style="zoom:33%;" />
<img src="https://i.loli.net/2020/05/30/N785GZmhWYv1z6p.png" alt="image-20200530221325375" style="zoom:33%;" />
<img src="https://i.loli.net/2020/05/30/yfXxWlcDuzNmhLv.png" alt="image-20200530221300298" style="zoom:33%;" />
(2)配置Thread Properties。
Number of Threads(users)設置爲10
Ramp-Up Period(in seconds)設置爲15
Loop Count設置爲30。
這樣設置後,根據測試計劃將運行10個用戶,全部用戶將在15s內啓動,而且每個用戶將執行30次錄製的測試場景。執行測試前,先單擊工具欄中的「保存」按鈕,保存測試計劃。
Https錄製測試腳本
若是須要錄製Https網站測試腳本,須要設置瀏覽器測試證書,以下火狐配置方式:
- 打開火狐輸入about:preferences#privacy
<img src="https://i.loli.net/2020/06/01/RfcaIX7HEvqQj6G.png" alt="image-20200601175002034" style="zoom: 33%;" />
- 導入證書:點擊**「查看證書」,選擇」導入證書」,選擇「jmeter安裝包下的bin目錄下的ApacheJMeterTemporaryRootCA.crt文件」**打開,依次安裝下圖操做完成導入。
<img src="https://i.loli.net/2020/06/01/J9Z8xfKTISFpYhX.png" alt="image-20200601175135970" style="zoom:40%;" />
<img src="https://i.loli.net/2020/06/01/K1hdYlnqItUu42s.png" alt="image-20200601175304220" style="zoom:40%;" />
<img src="https://i.loli.net/2020/06/01/dxoLPbqjrfiCWKO.png" alt="image-20200601175531104" style="zoom:55%;" />
完成以上操做後便可進行Https的腳本錄製操做。
建立第一個JMeter測試計劃
步驟一:啓動JMeter
- 進到JMeter bin文件夾,雙擊jmeter.bat 文件以啓動JMeter界面
<img src="https://i.loli.net/2020/05/29/IpXzUegyo7Tqx8m.png" alt="image-20200529214318081" style="zoom:50%;" />
-
默認的JMeter界面包含一個測試計劃節點,其中保留了真實的測試計劃。
-
「測試計劃(Test plan)」節點包含測試計劃的名稱和用戶定義的變量。
-
當您在測試計劃的多個部分中有重複值時,可以使用用戶定義變量,它提供了靈活性。
步驟二:添加/刪除測試計劃元素
-
爲JMeter建立測試計劃後,下一步是向JMeter測試計劃添加和刪除元素。
-
選擇測試計劃節點,而後右鍵單擊所選項目。
-
鼠標懸停在**「Add」**選項上,而後將顯示元素列表。
-
鼠標懸停在所需的列表元素上,而後單擊選擇所需的選項。
-
下圖顯示瞭如何在測試計劃中添加線程組元素:
<img src="https://i.loli.net/2020/05/29/rfKLWTEosuvYCM8.png" alt="img" style="zoom: 50%;" />
-
要刪除元素,請選擇所需的元素。
-
要刪除元素,請選擇所需的元素。
-
右鍵單擊元素,而後選擇**「Remove」**選項。
-
下圖顯示瞭如何刪除測試計劃中的線程組元素:
<img src="https://i.loli.net/2020/05/29/qXujeEUx4729Hha.png" alt="img" style="zoom: 67%;" />
步驟三:加載並保存測試計劃元素
-
要將元素加載到JMeter測試計劃樹,請選擇並右鍵單擊要添加已加載元素的任何樹元素。
-
選擇**「Merge」**選項。
-
選擇保存元素的
.jmx
文件。 -
元素將合併到JMeter測試計劃樹中。
<img src="https://i.loli.net/2020/05/29/VhgwRcJSGZP9QIk.png" alt="img" style="zoom:67%;" />
-
要保存樹元素,請右鍵單擊元素。
-
選擇**「Save Selection As」**選項。
-
將文件保存在所需位置。
<img src="https://i.loli.net/2020/05/29/A8YLz3vQbnOUVIH.png" alt="img" style="zoom: 50%;" />
步驟四:配置樹元素
可使用JMeter右側框架上的控件配置測試計劃中的元素。 這些控件容許您配置所選元素的行爲。 例如,能夠經過如下方式配置線程組:
-
元素的名稱。
-
線程數(正在測試的用戶數)。
-
加速時間(但願容許線程組從
0
到3
個用戶的時間)。 -
循環計數(應該循環測試的次數)。
<img src="https://i.loli.net/2020/05/29/OFftD1uMUR5n7ZV.png" alt="img" style="zoom:50%;" />
步驟五:保存JMeter測試計劃
到目前爲止,咱們已經完成了建立測試計劃,添加元素和配置樹。 如今,您能夠經過從文件菜單中選擇**「Save」** 或**「Save Test Plan As」**來保存整個測試計劃。
步驟六:運行JMeter測試計劃
能夠經過單擊菜單項中的**「Start(Control + r)」**來運行測試計劃,也能夠單擊綠色播放按鈕。 下圖顯示瞭如何運行測試計劃。
<img src="https://i.loli.net/2020/05/29/Z7apAsD9Y2BOyMX.png" alt="img" style="zoom:50%;" />
當測試計劃開始運行時,JMeter界面在菜單欄正下方的部分的右端顯示一個綠色圓圈。 綠色圓圈左側的數字表示:
- 活動線程數/總線程數
步驟七:中止JMeter測試計劃
可使用Stop(Control +’.’)中止測試計劃 - 若是可能,它會當即中止線程。 您還可使用Shutdown(Control +’,’) - 它請求線程在任何正在進行的任務結束時中止。
步驟八:檢查JMeter測試計劃執行日誌
JMeter將測試運行詳細信息,警告和錯誤存儲到jmeter.log
文件中。 您能夠經過單擊菜單欄正下方部分右側的驚歎號來訪問JMeter日誌。 下圖顯示瞭如何訪問JMeter日誌:
<img src="https://i.loli.net/2020/05/29/s7VU2cXHb3eRAyr.png" alt="img" style="zoom:50%;" />
JMeter測試計劃
JMeter測試計劃元素
JMeter包含各類相互關聯但爲不一樣目的而設計的元素。在開始使用JMeter以前,最好先了解一下JMeter的一些主要元素,並詳細說明。
注意:測試計劃包含至少一個線程組。
如下是JMeter的一些主要組件:
- 測試計劃(Test Plan)
- 線程組(Thread Group)
- 控制器(Controllers)
- 監聽器(Listeners)
- 計時器(Timers)
- 配置元素(Configuration Elements)
- 預處理器元素(Pre-Processor Elements)
- 後處理器元素(Post-Processor Elements)
請參閱如下圖,以瞭解每一個組件及其與JMeter特定模塊的關係。
JMeter線程組
線程組顧名思義,線程組表示JMeter在測試期間將使用的線程組。 線程組元素是任何測試計劃的起點。 線程組提供的控件容許:
- 設置線程數。
- 設置加速期。
- 設置執行測試的次數。
前面已在「添加/刪除測試元素」部分中說明了在測試計劃中添加線程組的步驟。 下圖顯示了線程組的控制面板部分。
<img src="https://www.yiibai.com/uploads/images/2018/08/02/170253_30401.png" alt="img" style="zoom:50%;" />
線程組控制面板包括:
- 線程組名稱。
- 線程數(您正在測試的用戶數)。
- 加速時間(您但願容許線程組從0到3個用戶的時間)。
- 循環計數(應該循環測試的次數)。
- 調度程序複選框(「線程組」面板底部的複選框用於啓用/禁用額外字段,您能夠在其中輸入測試持續時間,啓動延遲,運行的開始和結束時間)。
JMeter控制器
控制器可分爲兩大類:
- 採樣器
- 邏輯控制器
1. 採樣器
採樣器是容許JMeter將特定類型的請求發送到服務器的組件。它模擬用戶對目標服務器的頁面的請求。
採樣器是必須將組件添加到測試計劃中的,由於它只能讓JMeter知道須要將哪一種類型的請求發送到服務器。 請求能夠是HTTP,HTTP(s),FTP,TCP,SMTP,SOAP等。
下面給出了JMeter採樣器服務的請求列表:
- FTP請求
- HTTP請求(也可用於SOAP或REST Web服務)
- JDBC請求
- Java對象請求
- JMS請求
- JUnit測試請求
- LDAP請求
- 郵件請求
- 操做系統進程請求
- TCP請求
JMeter採樣器只能經過下圖所示的方法添加到線程組中:
下圖顯示了HTTP請求採樣器控制面板:
2. 邏輯控制器
邏輯控制器可幫助您控制線程中採樣器處理順序的流程。 它還能夠更改來自其子元素的請求的順序。
如下是JMeter中全部邏輯控制器的列表:
- 運行時控制器
- IF控制器
- 事務控制器
- 錄音控制器
- 簡單控制器
- while控制器
- Switch控制器
- ForEach控制器
- 模塊控制器
- 包括控制器
- 循環控制器
- 僅一次控制器
- 交錯控制器
- 隨機控制器
- 隨機順序控制器
- 吞吐量控制器
下圖顯示瞭如何將ForEach邏輯控制器添加到測試計劃中:
<img src="https://www.yiibai.com/uploads/images/2018/08/02/171522_14436.png" alt="img" style="zoom:50%;" />
下圖顯示了ForEach控制器控制面板:
<img src="https://www.yiibai.com/uploads/images/2018/08/02/171555_78064.png" alt="img" style="zoom:50%;" />
JMeter監聽器
性能測試就是以各類形式分析服務器響應,而後將其呈現給客戶端。
當JMeter的採樣器組件被執行時,監聽器提供JMeter收集的關於那些測試用例的數據的圖形表示。它便於用戶在某些日誌文件中以表格,圖形,樹或簡單文本的形式查看採樣器結果。
監聽器能夠在測試的任何地方進行調整,直接包括在測試計劃下。JMeter提供了大約15個監聽器,但主要使用的是表,樹和圖形。
如下是JMeter中全部監聽器的列表:
- 圖表結果
- 樣條曲線可視化器
- 斷言結果
- 簡單的數據編寫者
- 監控結果
- 分佈圖(alpha)
- 聚合圖
- 梅勒展現臺
- BeanShell監聽器
- 總結報告
- 示例結果保存配置
- 圖表完整結果
- 查看結果樹
- 彙總報告
- 查看錶格中的結果
下圖顯示瞭如何在測試計劃中添加監聽器:
<img src="https://www.yiibai.com/uploads/article/2018/08/02/171858_59718.png" alt="img" style="zoom:50%;" />
JMeter計時器
當您在網站或應用程序上執行任何操做時,它們天然會有暫停和延遲。 這些可使用計時器(Timers)進行模擬。
JMeter發送請求時不會在每一個採樣器/請求之間應用延遲。 若是在服務器上執行負載/壓力測試沒有指定延遲,它將會超載。 這可能不徹底是咱們想要的。能夠添加一個計時器元素,該元素容許您定義在每一個請求到達時間等待的終止。
下面給出了JMeter提供的全部計時器元素的列表:
- 同步定時器
- JSR223 時間
- BeanShell 時間
- 高斯隨機定時器
- 統一隨機定時器
- 恆定吞吐量計時器
- BSF時間
- 泊松隨機時間
下圖顯示了一個恆定時器控制面板:
<img src="https://www.yiibai.com/uploads/article/2018/08/02/174612_77107.png" alt="img" style="zoom:50%;" />
JMeter配置元素
配置元素的工做與採樣器的工做相似。可是,它不發送請求,但它容許修改採樣器發出的請求。
這是一個簡單的元素,您能夠在其中收集全部採樣器的關聯配置值,如webserver的主機名或數據庫URL等。
配置元素只能從放置元素的分支內部訪問。
下面給出了JMeter提供的一些最經常使用配置元素的列表:
- Java請求默認值
- LDAP請求默認值
- LDAP擴展請求默認值
- 密鑰庫配置
- JDBC鏈接配置
- 登陸配置元素
- CSV數據集配置
- FTP請求默認值
- TCP採樣器配置
- 用戶定義的變量
- HTTP受權管理器
- HTTP緩存管理器
- HTTP Cookie管理器
- HTTP代理服務器
- HTTP請求默認值
- HTTP標頭管理器
- 簡單的配置元素
- 隨機變量
下圖顯示瞭如何將配置元素添加到測試計劃中 -
<img src="https://www.yiibai.com/uploads/article/2018/08/02/175205_28314.png" alt="img" style="zoom:50%;" />
JMeter預處理器元素
預處理器元素在採樣器發出請求以前執行,若是預處理器附加到採樣器元素,那麼它將在該採樣器元素運行以前執行。 預處理器元素用於在運行以前修改樣本請求的設置,或更新未從響應文本中提取的變量。 如下是JMeter提供的全部預處理器元素的列表:
- JDBC預處理器
- JSR223預處理器
- RegEx用戶參數
- BeanShell預處理器
- BSF預處理器
- HTML連接解析器
- HTTP URL重寫修飾符
- HTTP用戶參數修飾符
- 用戶參數
下圖顯示瞭如何將預處理器元素添加到測試計劃中 -
<img src="https://www.yiibai.com/uploads/images/2018/08/02/175631_46005.png" alt="img" style="zoom:50%;" />
JMeter後處理器元素
在發出採樣器請求以後執行後處理器元素。 若是後處理器鏈接到Sampler元素,那麼它將在該sampler元素運行以後執行。
後處理器最經常使用於處理響應數據,例如,爲了未來目的而提取特定值。
下面給出了JMeter提供的全部後處理器元素的列表:
- CSS/JQuery抽取器
- BeanShell後處理器
- JSR223後處理器
- JDBC後處理器
- 調試後處理器
- 正則表達式提取器
- XPath抽取器
- 結果狀態操做處理程序
- BSF後處理器
下圖顯示瞭如何將後處理器元素添加到測試計劃中 -
<img src="https://www.yiibai.com/uploads/article/2018/08/02/180931_39141.png" alt="img" style="zoom:50%;" />
JMeter函數
JMeter函數能夠稱爲特殊值,能夠填充測試樹中任何Sampler或其餘元素的字段。 JMeter中函數的語法:
${__functionName(var1,var2,var3)} , Shell
這裏__ functionName
匹配函數的名稱,圓括號圍繞發送給函數的參數。
若是函數參數包含逗號,那麼請務必使用「\」
對其進行轉義,不然JMeter會將其視爲參數分隔符。 例如:
${__time(EEE\, d MMM yyyy)} Shell
函數列表
函數類型 | 名稱 | 註解 |
---|---|---|
信息 | threadNum | 獲取線程號 |
信息 | samplerName | 獲取採樣器名稱(標籤)。 |
信息 | log | 記錄(或顯示)消息(並返回值)。 |
信息 | machineName | 獲取本地計算機名稱。 |
輸入 | StringFromFile | 從文件中讀取一行。 |
輸入 | FileToString | 讀取整個文件。 |
輸入 | CSVRead | 從CSV分隔文件中讀取。 |
輸入 | XPath | 使用XPath表達式從文件中讀取。 |
計算 | Counter | 生成遞增數字。 |
計算 | intSum | 相加int數字。 |
計算 | longSum | 相加long數字。 |
計算 | Random | 生成一個隨機數。 |
計算 | RandomString | 生成隨機字符串。 |
腳本 | BeanShell | 運行BeanShell腳本。 |
腳本 | javaScript | 運行javaScript腳本。 |
腳本 | jexl, jexl2 | 評估Commons Jexl表達式。 |
屬性 | Property | 讀取property文件。 |
屬性 | P | 讀取一個屬性(速記方法)。 |
變量 | Split | 將字符串拆分爲變量。 |
變量 | eval | 評估變量表達式。 |
字符串 | regexFunction | 使用正則表達式解析先前的響應。 |
字符串 | escapeOroRegexpChars | 引用ORO正則表達式使用的元字符。 |
字符串 | Char | 從數字列表生成Unicode char值。 |
字符串 | Unescape | 包含Java轉義的進程字符串(例如\n&\t)。 |
字符串 | unescapeHtml | 解碼HTML編碼的字符串。 |
字符串 | escapeHtml | 使用HTML編碼對字符串進行編碼。 |
字符串 | TestPlanName | 返回當前測試計劃的名稱。 |
注意:JMeter函數和變量始終區分大小寫。
讓咱們考慮一個Log Function的例子來理解JMeter中函數的使用。
JMeter日誌函數的語法:
${__log("message")} Shell
首先,咱們將使用HTTP請求採樣器建立一個簡單的測試計劃。
建立JMeter測試計劃
- 進入到
JMeter/bin
文件夾並雙擊jmeter.bat
文件以啓動JMeter界面。 - 選擇測試計劃節點,而後右鍵單擊所選項目。
- 鼠標懸停在**「Add」**選項上,而後將顯示元素列表。
- 選擇**「Threads (Users)」** > 「Thread Grou」。
- 將此線程組重命名爲Thread Group 1。
添加採樣器
咱們必須在線程組中添加一個HTTP請求採樣器。
- 選擇**「Thread Group」**,而後右鍵單擊所選項。
- 鼠標懸停在**「Add」**選項上,而後將顯示元素列表。
- 選擇Sampler > HTTP請求選項。
- 它將添加一個空的HTTP請求採樣器。
將HTTP Request Sampler的字段配置爲 -
- Name - HTTP請求採樣器1。
- Server名稱或IP - 在示例中,Web服務器名稱將爲 - www.yiibai.com 。
- Protocol - 此字段保持不變。
- Path - 咱們將其寫爲
「/」
(斜槓)。 它表示咱們想要服務器的根頁面。
如今,複製整個線程組1 並將其粘貼在測試計劃中三次。
- 將其餘線程組分別重命名爲線程組2和線程組3。
- 將其餘採樣器分別重命名爲HTTP Request 2 和HTTP Request 3。
下圖顯示了測試計劃的目錄結構。
<img src="https://www.yiibai.com/uploads/images/2018/08/03/101428_89408.png" alt="img" />
添加監聽器
-
選擇**「Test Plan」**節點,而後右鍵單擊所選項目。
-
鼠標懸停在**「Add」**選項上,而後將顯示元素列表。
-
選擇 Listener -> Summary Report。
保存並執行測試計劃
-
單擊文件 -> 將測試計劃另存爲。
-
將整個測試計劃保存爲
Function_test.jmx
。 -
單擊**「Run」** -> 「Start」 以執行測試計劃。
驗證輸出
<img src="https://www.yiibai.com/uploads/images/2018/08/03/101803_50220.png" alt="img" style="zoom:100%;" />
所以,已經成功執行了測試計劃。 如今,咱們將使用log函數做爲第一個HTTP Request Sampler的名稱。
您能夠看到日誌功能已打印**「Hello World」**而不是完整的採樣器名稱。 讓咱們來看看一個時間函數的例子,將再次使用它做爲第二個HTTP採樣器的名稱。
時間函數的語法:
${__time(dd MM YYYY HH mm ss)} Shell
單擊Run > Start 以執行測試計劃。
能夠看到時間函數已打印確切的時間和日期,而不是完整的採樣器名稱。 要得到有關JMeter函數及其用法的更多信息,請參閱如下連接提供的Apache JMeter文檔: http://jmeter.apache.org/usermanual/functions.html
JMeter監聽器
JMeter Aggregate Report(聚合報告)
AggregateReport 是 JMeter 經常使用的一個 Listener,中文被翻譯爲「聚合報告」。
表項說明:
-
Label:請求的名稱,就是咱們在進行測試的httprequest sampler的名稱
-
Samples:總共發給服務器的請求數量,若是模擬10個用戶,每一個用戶迭代10次,那麼總的請求數爲:1010 =100次;
-
Average: 默認狀況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 爲單位顯示平均響應時間 ,單位是毫秒
-
Median: 50%用戶的請求的響應時間,中位數
-
90%Line:90%的請求的響應時間
-
95%Line:95%的請求的響應時間
-
99%Line:99%的請求的響應時間
-
Min:最小的響應時間
-
Max:最大的響應時間
-
Error%:錯誤率=錯誤的請求的數量/請求的總數
-
Throughput: 默認狀況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也能夠表示相似 LoadRunner 的 Transaction per Second 數,Throughput能夠理解爲TPS(Transaction per Second)越大越好
-
KB/sec: 每秒從服務器端接收到的數據量
90% Line
一組數由小到大進行排列,找到他的第90%個數(假如是12),那麼這個數組中有90%的數將小於等於12 。
JMeter Summary Report(彙總報告)
-
Label:取樣器名稱(或者是事務名)。
-
#Samples:取樣器運行次數(提交了多少筆業務)。
-
Average:請求(事務)的平均響應時間,單位爲毫秒。
-
Min:請求的最小響應時間,單位爲毫秒。
-
Max:請求的最大響應時間,單位爲毫秒。
-
Std.Dev:響應時間的標準方差。偏離量,越小表示越穩定。這些狀況偏離了樣本響應時間的平均值。該值越小,數據越一致。標準誤差應小於或等於標籤平均時間的一半
-
Error%:事務錯誤率。
-
Throughput:吞吐率(TPS)。
-
KB/sec:每秒數據包流量,單位是KB。
-
Avg.Bytes:平均數據流量,單位是Byte。
JDBC壓力測試
Dubbo RPC測試
插件安裝
jmeter自己並不支持dubbo接口的測試,須要下載第三方插件,而後將jar包放入${JMETER_HOME}\lib\ext路徑下,重啓便可。
下載插件:jmeter-plugins-dubbo
Dubbo服務測試
啓動jmeter,添加線程組→Sampler→Listener,dubbo-sample界面以下:
<img src="https://i.loli.net/2020/06/01/z9wOsxayqmkVGlD.png" alt="image-20200601212204563" style="zoom:50%;" />
參數說明: **Protocol:**註冊協議,包括zookeeper、multicast、Redis、simple; **Address:**註冊地址,dubbo服務的IP+Port: ①、當使用zk,address填入zk地址,集羣地址使用","分隔; ②、使用dubbo直連,address填寫直連地址和服務端口; **Protocol:**使用的dubbo協議,包括dubbo、rmi、hessian、webservice、memcached、redis,根據本身的協議類型選擇對應的選項便可; **Timeout:**請求超時時間,單位ms,根據dubbo具體配置填寫; **Version:**版本,dubbo不一樣版本之間差別較大,不一樣版本之間不能互相調用,這裏指定dubbo版本,是爲了方便識別和說明; **Retries:**異常重試次數(相似這種分佈式服務通訊框架,大多都有重試機制,是爲了保證事務成功率); **Cluster:**集羣類型,包括failover、failfast、failsafe、failback、failking; **Group:**組類型,若是有的話,根據配置填寫便可; **Connections:**鏈接數,同上,根據配置填寫; **Async:**服務處理類型,包括sync(同步)、async(異步),根據配置填寫; **Loadbalance:**負載均衡策略,包括random(隨機)、roundrobin(輪詢)、leastactive(最少活躍數)、consistenthash(一致性哈希); **Interface:**接口名(由於dubbo服務大可能是開發根據規範自行命名的,所以這裏須要填寫完整的接口名+包名); **Method:**當前接口下的方法名,按照開發提供的API文檔填寫便可; **Args:**接口報文,根據API文檔填寫,如上圖所示,添加輸入行,輸入對應的參數類型和值便可(參數類型和值如何定義填寫,請參考上面的連接); ①、paramType:參數支持任何類型,包裝類直接使用java.lang
下的包裝類,小類型使用:int``、``float``、``shot``、``double``、``long``、``byte``、``boolean``、``char
,自定義類使用類徹底名稱; ②、paramValue:基礎包裝類和基礎小類型直接使用值,例如:int爲1,boolean爲true等,自定義類與List
或者Map
等使用json格式數據;
<img src="https://i.loli.net/2020/06/01/aqbhuRYIlS4MHoD.png" alt="image-20200601215342994" style="zoom: 50%;" />
分佈式壓力測試
你們在使用JMeter壓測過程當中,可能會度遇到內存溢出的錯誤,這是爲何呢?
由於JMeter是java寫的應用,java應用jvm堆內存heap受負載機硬件限制,雖然咱們能夠調整堆內存大小,
可是單機沒法支撐數以萬計大併發,此時,須要多個負載機進行分壓測試,這樣性能瓶頸就不會是咱們的負載機了。
JMeter分佈式壓測原理
JMeter分佈式壓測時,選擇其中一臺做爲控制機,其他的機器作爲負載機,
執行時,控制機會把腳本發送到每一個負載機上,負載機獲取到腳本就執行腳本(負載機只須要啓動jmeter-server.bat或者jmeter-server),
執行後,負載機回傳執行結果給控制機,控制機會進行彙總。值得注意的是:若是請求執行成功,不會回傳請求的響應信息,因此在查看結果樹中, 響應結果看到是空的。
<img src="https://images2018.cnblogs.com/blog/1024732/201808/1024732-20180831102922729-187908951.png" alt="img" style="zoom:50%;" />
<img src="https://images2018.cnblogs.com/blog/1024732/201808/1024732-20180831102941857-480990901.png" alt="img" style="zoom:50%;" />
JMeter分佈式環境搭建
-
使用windows做爲master,Linux做爲slaves,在master和slaves機器上分別按照相同版本的jdk和jmeter。
jdk下載地址:
-
master機器配置
-
修改配置文件,進入jmeter/bin目錄下,打開jmeter.properties,修改內容以下:
remote_hosts=192.168.0.102:8899,192.168.0.101:8899(slaves機器的ip和端口) server.rmi.ssl.disable=true(禁用ssl)
-
若是master即做爲master也做爲slaves
remote_hosts=192.168.0.102:8899,192.168.0.101:8899,master的ip:8899 server_port=8899 server.rmi.ssl.disable=true(禁用ssl)
-
啓動jmeter服務
./jmeter-server(linux) jmeter-server.bat(windows)
-
-
slaves配置
-
修改配置文件,進入jmeter/bin目錄下
remote_hosts=127.0.0.1 server_port=8899 server.rmi.ssl.disable=true(禁用ssl)
-
啓動jmeter服務
./jmeter-server(linux)
jmeter-server.bat(windows)
-
檢查是否啓動成功(linux)
ps -ef|grep jmeter-serve
-
-
JMeter分佈式環境測試啓動
JMeter分佈式是環境問題
- 服務器地址配置問題
[code@localhost bin]$ ./jmeter-server OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/dir/apache-jmeter-5.3/lib/log4j-slf4j-impl-2.13.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/dir/apache-jmeter-5.3/lib/ext/jmeter-plugins-dubbo-2.7.7-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:34334](local),objID:[22f4ffbf:1727440255f:-7fff, -5616908529906043677]]] Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address. An error occurred: Cannot start. localhost.localdomain is a loopback address.
-
方式一:經過終端命令指定來啓動
./jmeter-server -Djava.rmi.server.hostname=192.168.196.132
-
方式二:編輯jmeter-server文件,設置固定的代理服務器主機IP
打開Linux中的jmeter-server:
sudo vi ./jmeter-server
編輯jmeter-server,取消RMI_HOST_DEF的註釋項,固定設置當前Linux主機查詢到的IP:
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.196.132
<img src="https://i.loli.net/2020/06/02/EdwATN4tmQYBrli.png" alt="image-20200602170442296" style="zoom:70%;" />
直接以命令 jmeter-server 或 ./jmeter-server 啓動便可。
-
防火牆問題致使沒法訪問
systemctl disable firewalld.service #禁止firewall開機啓動
systemctl disable firewalld.service #禁止firewall開機啓動 systemctl disable firewalld systemctl stop firewalld #關閉防火牆