程序員須要掌握的測試工具-JMeter壓力測試

學習目標?

瞭解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經過模擬一組用戶將請求發送到目標服務器。 隨後,收集數據以經過各類格式計算目標服務器的統計和顯示性能度量。以下圖:

img

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設置」**。

image-20200530220208517

<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次錄製的測試場景。執行測試前,先單擊工具欄中的「保存」按鈕,保存測試計劃。

image-20200530221539241

Https錄製測試腳本

若是須要錄製Https網站測試腳本,須要設置瀏覽器測試證書,以下火狐配置方式:

  1. 打開火狐輸入about:preferences#privacy

<img src="https://i.loli.net/2020/06/01/RfcaIX7HEvqQj6G.png" alt="image-20200601175002034" style="zoom: 33%;" />

  1. 導入證書:點擊**「查看證書」,選擇」導入證書」,選擇「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右側框架上的控件配置測試計劃中的元素。 這些控件容許您配置所選元素的行爲。 例如,能夠經過如下方式配置線程組:

  • 元素的名稱。

  • 線程數(正在測試的用戶數)。

  • 加速時間(但願容許線程組從03個用戶的時間)。

  • 循環計數(應該循環測試的次數)。

    <img src="https://i.loli.net/2020/05/29/OFftD1uMUR5n7ZV.png" alt="img" style="zoom:50%;" />

步驟五:保存JMeter測試計劃

到目前爲止,咱們已經完成了建立測試計劃,添加元素和配置樹。 如今,您能夠經過從文件菜單中選擇**「Save」** 或**「Save Test Plan As」**來保存整個測試計劃。

image-20200529220435707

步驟六:運行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特定模塊的關係。

img

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採樣器只能經過下圖所示的方法添加到線程組中: img

下圖顯示了HTTP請求採樣器控制面板:

img

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請求採樣器。

img

將HTTP Request Sampler的字段配置爲 -

  • Name - HTTP請求採樣器1。
  • Server名稱或IP - 在示例中,Web服務器名稱將爲 - www.yiibai.com 。
  • Protocol - 此字段保持不變。
  • Path - 咱們將其寫爲「/」(斜槓)。 它表示咱們想要服務器的根頁面。

如今,複製整個線程組1 並將其粘貼在測試計劃中三次。

  • 將其餘線程組分別重命名爲線程組2線程組3
  • 將其餘採樣器分別重命名爲HTTP Request 2HTTP Request 3

下圖顯示了測試計劃的目錄結構。

<img src="https://www.yiibai.com/uploads/images/2018/08/03/101428_89408.png" alt="img" />

添加監聽器

  • 選擇**「Test Plan」**節點,而後右鍵單擊所選項目。

  • 鼠標懸停在**「Add」**選項上,而後將顯示元素列表。

  • 選擇 Listener -> Summary Report

    img

保存並執行測試計劃

  • 單擊文件 -> 將測試計劃另存爲。

  • 將整個測試計劃保存爲Function_test.jmx

    img

  • 單擊**「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的名稱。

img

您能夠看到日誌功能已打印**「Hello World」**而不是完整的採樣器名稱。 讓咱們來看看一個時間函數的例子,將再次使用它做爲第二個HTTP採樣器的名稱。

時間函數的語法:

${__time(dd MM YYYY HH mm ss)}
Shell

img

單擊Run > Start 以執行測試計劃。

img

能夠看到時間函數已打印確切的時間和日期,而不是完整的採樣器名稱。 要得到有關JMeter函數及其用法的更多信息,請參閱如下連接提供的Apache JMeter文檔: http://jmeter.apache.org/usermanual/functions.html

JMeter監聽器

JMeter Aggregate Report(聚合報告)

AggregateReport 是 JMeter 經常使用的一個 Listener,中文被翻譯爲「聚合報告」。

image-20200601154538746

表項說明:

  • 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分佈式環境搭建

  1. 使用windows做爲master,Linux做爲slaves,在master和slaves機器上分別按照相同版本的jdk和jmeter。

    jdk下載地址:

  2. 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)

  3. 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

  4. JMeter分佈式環境測試啓動

JMeter分佈式是環境問題

  1. 服務器地址配置問題
[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 啓動便可。

  1. 防火牆問題致使沒法訪問

    systemctl disable firewalld.service #禁止firewall開機啓動

    systemctl disable firewalld.service #禁止firewall開機啓動
    systemctl disable firewalld
    systemctl stop firewalld #關閉防火牆

本文轉載:Java入門基礎-程序員須要掌握的測試工具-JMeter壓力測試

相關文章
相關標籤/搜索