1. 程式人生 > >JMeter使用示例

JMeter使用示例


下載安裝

  1. 安裝主程式

從Apache JMeter官網下最新版本:jmeter.apache.org/download_jm…
如圖:



下載後直接解壓即可。

  1. 安裝外掛管理

從http://www.jmeter-plugins.org/install/Install/ 下載外掛管理包,如圖:


將下載的包放至jmemter解壓根目錄的lib/ext下即可。

目錄說明

先看一下解壓後的JMeter安裝目錄:


  • 目錄說明

  • bin 包含啟動、配置等相關命令

  • docs 官方本地文件目錄

  • extras 輔助庫

  • lib 核心庫,包含JMeter用到的各種基礎庫和外掛

  • licenses 包含non-ASF軟體的許可證

  • printable_docs 可列印版本文件目錄

  • LICENSE JMeter許可說明

  • NOTICE JMeter簡單資訊說明

  • README.md JMeter官方基本介紹

下面我們重點看下bin目錄,如圖:


主要介紹bin目錄下我們最關注幾個檔案:

  • jmeter.properties JMeter核心配置檔案,各種配置基本在這完成

  • log4j.conf JMeter日誌配置管理

  • jmeter.log JMeter執行日誌記錄,什麼輸出資訊、警告、報錯都在這裡進行了記錄

  • jmeter.bat windows下jmeter啟動檔案

  • shutdown.cmd windows下jmeter關閉檔案

  • stoptest.cmd windows下jmeter測試停止檔案

  • jmeter-server.bat windows下jmeter伺服器模式啟動檔案

注:每一個.cmd檔案都對應一個.sh檔案,.sh是linux下的對應功能的檔案

其他檔案的功能就不一一說明了,同時其他目錄這裡也不再進行闡述,有興趣的朋友可以自己深入看下。

關鍵配置說明

  1. jmeter.properties配置說明

主要包含以下幾個方面的配置:

  • SSL配置:

重點關注下面幾個配置# 指定HTTPS協議層https.default.protocol=TLS# 指定SSL版本,實際應用中可能需要修改https.default.protocol=SSLv3# 設定啟動的協議https.socket.protocols=SSLv2Hello SSLv3 TLSv1# 快取控制,控制SSL是否可以在多個迭代中重用https.use.cached.ssl.context=true
複製程式碼
  • JMeter介面顯示配置

這裡就不對其介面顯示控制進行說明了,一般情況下預設介面能滿足大家的應用了。

  • JMeter測試專案自動備份配置

# 設定是否啟用自動備份,預設是truejmeter.gui.action.save.backup_on_save=true# 設定自動備份目錄,預設備份至JMeter根目錄的backups下jmeter.gui.action.save.backup_directory=# 設定自動備份專案數,預設為最近10個jmeter.gui.action.save.keep_backup_max_count=10複製程式碼
  • 遠端主機配置

# 配置遠端主機的IP,預設為本機。用逗號","可以設定多個遠端主機remote_hosts=127.0.0.1# 多個遠端主機指定示例如下,其中:後為埠remote_hosts=127.0.0.1:1099,127.0.0.1:1200,127.0.0.1:1300對於RMID的配置請直接看配置檔案中的選項說明複製程式碼
  • 日誌管理配置

# 設定日誌格式log_format_type=default# 設定日誌輸出級別log_level.jmeter=INFO# 設定junit日誌輸出級別log_level.jmeter.junit=DEBUG# 設定日誌輸出目標檔案,預設為jmeter.loglog_file=jmeter.log複製程式碼
  • 等等其他還有10多個配置大項(就不一一列舉了)

  1. jmeter.bat關鍵配置修改

為了更優化的使用jmeter,需要對jmeter.bat中的一些配置根據當前機器的配置進行優化,這裡進行關鍵配置項說明,大家根據自己的機器的配置來進行修改。

jvm相關配置,大概在80行左右,找到這些配置,
對其中的數值根據當前機器的硬體配置來修改。set HEAP=-Xms2048m -Xmx2048mset NEW=-XX:NewSize=512m -XX:MaxNewSize=512mset SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%set TENURING=-XX:MaxTenuringThreshold=2if %current_minor% LEQ "8" (    rem Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
    set PERM=-XX:PermSize=512m -XX:MaxPermSize=1024m
)複製程式碼

啟動jmeter

在bin目錄下直接雙擊jmeter.bat即可複製程式碼

啟動後的介面如下:




HTTP協議報文結構及示例

HTTP基本架構

下面我們用一張簡單的流程圖來展示HTTP協議基本架構,以便大家先有個基本的瞭解。


  • Web Client可以是瀏覽器、搜尋引擎、機器人等等一切基於HTTP協議發起http請求的工具。

  • Web Server可以是任何的能解析HTTP請求,並返回給Web Client可識別的響應的服務,常見的有apache、nginx、IIS等等web伺服器。

濃縮就是精華,看下最簡潔的HTTP互動圖:


HTTP報文結構

  • 請求報文

HTTP請求報文由請求行、請求頭、空行和請求內容4個部分構成。

如下圖所示:


下面對上圖進行簡單的分析:

請求行

由請求方法欄位、URL欄位、協議版本欄位三部分構成,它們之間由空格隔開。常用的請求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

請求頭

請求頭由key/value對組成,每行為一對,key和value之間通過冒號(:)分割。請求頭的作用主要用於通知服務端有關於客戶端的請求資訊。

典型的請求頭有:

User-Agent:生成請求的瀏覽器型別

Accept:客戶端可識別的響應內容型別列表;星號* 用於按範圍將型別分組。*/*表示可接受全部型別,type/*表示可接受type型別的所有子型別。

Accept-Language: 客戶端可接受的自然語言

Accept-Encoding: 客戶端可接受的編碼壓縮格式

Accept-Charset: 可接受的字符集

Host: 請求的主機名,允許多個域名繫結同一IP地址

connection:連線方式(close或keeplive)

Cookie: 儲存在客戶端的擴充套件欄位

空行

最後一個請求頭之後就是空行,用於告訴服務端以下內容不再是請求頭的內容了。

請求內容

請求內容主要用於POST請求,與POST請求方法配套的請求頭一般有Content-Type(標識請求內容的型別)和Content-Length(標識請求內容的長度)

  • 響應報文

HTTP響應報文由狀態行、響應頭、空行和響應內容4個部分構成。

如下圖所示:


下面對響應報文格式進行簡要的分析說明:

狀態行

由HTTP協議版本、狀態碼、狀態碼描述三部分構成,它們之間由空格隔開。

狀態碼由3位數字組成,第一位標識響應的型別,常用的5大類狀態碼如下:

1xx:表示伺服器已接收了客戶端的請求,客戶端可以繼續傳送請求

2xx:表示伺服器已成功接收到請求並進行處理

3xx:表示伺服器要求客戶端重定向

4xx:表示客戶端的請求有非法內容

5xx:標識伺服器未能正常處理客戶端的請求而出現意外錯誤

常見狀態碼說明:

200 OK: 表示客戶端請求成功

400 Bad Request: 表示客戶端請求有語法錯誤,不能被伺服器端解析

401 Unauthonzed: 表示請求未經授權,該狀態碼必須與WWW-Authenticate報文頭一起使用

404 Not Found:請求的資源不存在,例如輸入了錯誤的url

500 Internal Server Error: 表示伺服器發生了不可預期的錯誤,導致無法完成客戶端的請求

503 Service Unavailable:表示伺服器當前不能處理客戶端的請求,在一段時間後伺服器可能恢復正常

響應頭

一般情況下,響應頭會包含以下,甚至更多的資訊。

Location:伺服器返回給客戶端,用於重定向到新的位置

Server: 包含伺服器用來處理請求的軟體資訊及版本資訊

Vary:標識不可快取的請求頭列表

Connection: 連線方式。

對於請求端來講:close是告訴服務端,斷開連線,不用等待後續的求請了。keeplive則是告訴服務端,在完成本次請求的響應後,保持連線,等待本次連線後的後續請求。

對於響應端來講:close表示連線已經關閉。keeplive則表示連線保持中,可以繼續處理後續請求。Keep-Alive表示如果請求端保持連線,則該請求頭部資訊表明期望服務端保持連線多長時間(秒),例如300秒,應該這樣寫Keep-Alive: 300

空行

最後一個響應頭之後就是空行,用於告訴請求端以下內容不再是響應頭的內容了。

響應內容

服務端返回給請求端的文字資訊。

HTTP報文示例

在這裡我們在Firefox下用firebug隨意抓取一個HTTP包和上文的報文結構做下一一對應關係圖,以便大家瞭解實際的包和標準報文結構的對應關係。


JMeter元件

在jmeter中提供了一系列的不同的元件,每一種元件都提供了某類功能的實現,用於支援效能測試的實施。

請看下圖,jmeter的核心元件構成。


學習、研究jmeter之前,深入瞭解jmeter的基本元件及其作用是必須的。接下來我們開始討論基於jmetere進行效能測試必須掌握的元件,以便大家逐步掌握jemter的核心基本能力。

下面的幾個元件是入門jmeter必須掌握的:

  • Thread Group

  • Samplers

  • Listeners

  • Configuration

Thread Group(執行緒組)

執行緒組是一系列執行緒的集合,每一個執行緒代表著一個正在使用應用程式的使用者。在jmeter中,每個執行緒意味著模擬一個真實使用者向伺服器發起請求。

在jmeter中,執行緒組元件執行使用者設定執行緒數量、初始化方式等等配置。

例如,如果你設定執行緒數為100,那麼jmeter將建立並模擬測試100個使用者請求到伺服器端。

如下圖所示:


Samplers

我們常用的jmeter測試有HTTP、FTP、JDBC協議,以及其他各種支援的協議。

在上節我們已經知道執行緒元件用於模擬使用者請求至伺服器端。

但還未講解如何線上程元件中實現某種請求型別(比如如何發起HTTP請求?)。

在本節中,我們將演示如何利用Samplers元件的元素來實現各類請求型別。

我們先看一下在jmeter中Samplers元件已經實現了哪些協議的支援。如下圖所示:


下面我們就重要的Samplers元件元素進行一一講解,以便大家有個初步的瞭解。

  • BeanShell Sampler

這個元件元素允許我們在jmeter中寫Bean Shell指令碼,寫這個指令碼有什麼作用?意味著你可以完全的控制和實現自己的需要。靈活定製,自然也就有難度,你得有點指令碼功底。

參見圖說明:


注:每一個Sampler都有自己獨立的beanshell解析器,並且sampler只能在自己的執行緒中呼叫(意味著不可跨執行緒使用)。

  • FTP Request

FTP Request元素提供了測試ftp伺服器的能力,這個元素讓我們能夠去測試ftp的上傳、下載功能。

下面我們看一下ftp元素的基本配置說明:


注:我們經常在windows和linux直接通過ftp進行檔案傳輸,建議勾選Use Binary Mode,避免編碼問題。

  • HTTP Request

HTTP Request提供了HTTP/HTTPS協議的測試支援能力。

下面我們一起看看HTTP Request元素的基本配置說明,瞭解下基本的功能。


  • Java Request

Java Request提供了測試java API的支援,但要注意要測試的java API需要有對應的測試類,該測試類必須繼承AbstractJavaSamplerClient。 示例如下:

待測類class Sum; -> 生成sum.jar

繼承至AbstractJavaSamplerClient的測試類Class TestSum(AbstractJavaSamplerClient) -> 生成testSum.jar

注:

一個java測試應該要實現以下幾個方法,以便jmeter java sampler可以正確呼叫:

方法 說明
Arguments getDefaultParameters() 用於獲取jmeter java sampler傳入的測試資料
SampleResult runTest(JavaSamplerContext arg0) 測試事務處理
void setupTest(JavaSamplerContext arg0) 初始化
void teardownTest(JavaSamplerContext arg0) 清理

更詳細的後續出專題講解,本篇不舉具體示例了。

注意testSum.jar要能呼叫sum.jar。

將上述sum.jar、testSum.jar拷貝至jmeter安裝目錄的lib/ext下。

下面我們看看如何在jmeter配置java測試。


對於JDBC Request、JMS Point-to-Point、JSR223、SMTP、JUnit Request等Sampler元件元素就不一一說明了在後續的分享中,主要基於HTTP和java請求來分享實戰。

Listeners(監聽器)

在jmeter中Listeners提供了執行結果生成和顯示能力的支援,提供了樹形結構、表、圖形和日誌方式。

下面我們先看下幾種結果顯示示例圖。

圖形模式:


樹模式:


表模式:


日誌方式


Configuration Elements(即配置元件)

配置元件包含了Samplers下各種Sampler的預設配置設定,如果有配置預設配置,在Sampler下對應的sampler就會使用該預設配置。

下面我們看看我們主要用到的預設配置有哪些。


下面進行逐一的說明。

  • CSV Data Set Config CSV Data Set Config主要用於讀取csv格式的檔案中資料,實現引數化。


  • HTTP Cookie Manager HTTP Cookie Manager主要用於預設cookie管理。


  • HTTP Request Defaults HTTP Request Defaults用於配置HTTP request的預設值,例如IP、埠等等都設定好預設值後,在後續HTTP request元素裡就不需要重複設定,節省時間。


JMeter效能測試基本過程及示例

效能測試是我們日常測試過程中,必須掌握的技能。通過進行效能測試,我們能分析服務端的整體效能、負載等,以便進一步評估我們的業務系統是否能滿足當前運營生產及未來業務增長情況下如何進一步調整我們的服務配置方案。

jmeter為效能測試提供了一下特色:

  • jmeter可以對測試靜態資源(例如js、html等)以及動態資源(例如php、jsp、ajax等等)進行效能測試

  • jmeter可以挖掘出系統最大能處理的併發使用者數

  • jmeter提供了一系列各種形式的效能分析報告

使用jmeter一般用於以下兩種型別的效能測試


負載測試:通過測試系統在資源超負荷情況下的表現,以發現設計上的錯誤或驗證系統的負載能力。

壓力測試:測試系統能承受的最大負載能力。目的在於發挖掘出目標服務系統可以處理的最大負載。

基本過程

下面我們看下使用jmeter進行效能測試的基本過程。


對上圖進行簡要的說明

  • 新增執行緒組

建立測試執行緒組,並設定執行緒數量及執行緒初始化啟動方式。

  • 新增JMeter元組

建立各種預設元組及測試元組,填入目標測試靜態資源請求和動態資源請求引數及資料。

  • 新增監聽器

建立各種形式的結果蒐集元組,以便在執行過程及執行結束後蒐集監控指標資料。

  • 執行&檢視結果 除錯執行,分析指標資料,挖掘效能瓶頸、評估系統性能狀態、

示例

下面我們以開啟百度演示上述過程。

  • 新增執行緒組

  1. 在jmeter的bin目錄下雙擊jmeter.bat啟動jmeter

  2. 在左邊操作欄中選擇“測試計劃”,右擊新增一個執行緒組,如圖所示:


  3. 初始化執行緒組相關資訊,如圖:


  • 新增JMeter元組

  1. 新增預設配置元素,新增如下預設配置,如


各預設元件配置如圖所示。

HTTP Cache Manager


HTTP Cookie管理器


HTTP請求預設值


  1. 新增HTTP Request元組 線上程組上右擊新增HTTP請求,如圖:



HTTP請求設定如圖:


  • 新增監聽器

在這裡我們新增如下監聽器,如圖所示


  • 執行&檢視結果

如果啟動執行jmeter,可以單擊新增的監聽器檢視執行過程中的監控指標資料,也可以等執行結束後,再檢視。

如圖:


結果說明

下面我們就監聽器所採集的結果圖進行簡要的說明:

圖形結果


察看結果樹


用表格檢視結果


聚合報告