安裝主程序php
從Apache JMeter官網下最新版本:jmeter.apache.org/download_jm…
如圖:html
下載後直接解壓便可。java
安裝插件管理linux
從http://www.jmeter-plugins.org/install/Install/ 下載插件管理包,如圖:nginx
將下載的包放至jmemter解壓根目錄的lib/ext下便可。web
先看一下解壓後的JMeter安裝目錄:ajax
目錄說明shell
bin 包含啓動、配置等相關命令apache
docs 官方本地文檔目錄windows
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下的對應功能的文件
其餘文件的功能就不一一說明了,同時其餘目錄這裏也再也不進行闡述,有興趣的朋友能夠本身深刻看下。
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多個配置大項(就不一一列舉了)
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
)複製代碼
在bin目錄下直接雙擊jmeter.bat便可複製代碼
啓動後的界面以下:
下面咱們用一張簡單的流程圖來展現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
空行
最後一個響應頭以後就是空行,用於告訴請求端如下內容再也不是響應頭的內容了。
響應內容
服務端返回給請求端的文本信息。
在這裏咱們在Firefox下用firebug隨意抓取一個HTTP包和上文的報文結構作下一一對應關係圖,以便你們瞭解實際的包和標準報文結構的對應關係。
在jmeter中提供了一系列的不一樣的組件,每一種組件都提供了某類功能的實現,用於支持性能測試的實施。
請看下圖,jmeter的核心組件構成。
學習、研究jmeter以前,深刻了解jmeter的基本組件及其做用是必須的。接下來咱們開始討論基於jmetere進行性能測試必須掌握的組件,以便你們逐步掌握jemter的核心基本能力。
下面的幾個組件是入門jmeter必須掌握的:
Thread Group
Samplers
Listeners
Configuration
線程組是一系列線程的集合,每個線程表明着一個正在使用應用程序的用戶。在jmeter中,每一個線程意味着模擬一個真實用戶向服務器發起請求。
在jmeter中,線程組組件運行用戶設置線程數量、初始化方式等等配置。
例如,若是你設置線程數爲100,那麼jmeter將建立並模擬測試100個用戶請求到服務器端。
以下圖所示:
咱們經常使用的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、JSR22三、SMTP、JUnit Request等Sampler組件元素就不一一說明了在後續的分享中,主要基於HTTP和java請求來分享實戰。
在jmeter中Listeners提供了執行結果生成和顯示能力的支持,提供了樹形結構、表、圖形和日誌方式。
下面咱們先看下幾種結果顯示示例圖。
圖形模式:
樹模式:
表模式:
日誌方式
配置元件包含了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能夠對測試靜態資源(例如js、html等)以及動態資源(例如php、jsp、ajax等等)進行性能測試
jmeter能夠挖掘出系統最大能處理的併發用戶數
jmeter提供了一系列各類形式的性能分析報告
使用jmeter通常用於如下兩種類型的性能測試
負載測試:經過測試系統在資源超負荷狀況下的表現,以發現設計上的錯誤或驗證系統的負載能力。
壓力測試:測試系統能承受的最大負載能力。目的在於發挖掘出目標服務系統能夠處理的最大負載。
下面咱們看下使用jmeter進行性能測試的基本過程。
對上圖進行簡要的說明
新增線程組
建立測試線程組,並設置線程數量及線程初始化啓動方式。
新增JMeter元組
建立各類默認元組及測試元組,填入目標測試靜態資源請求和動態資源請求參數及數據。
新增監聽器
建立各類形式的結果蒐集元組,以便在運行過程及運行結束後蒐集監控指標數據。
運行&查看結果 調試運行,分析指標數據,挖掘性能瓶頸、評估系統性能狀態、
下面咱們以打開百度演示上述過程。
新增線程組
在jmeter的bin目錄下雙擊jmeter.bat啓動jmeter
在左邊操做欄中選擇「測試計劃」,右擊新增一個線程組,如圖所示:
初始化線程組相關信息,如圖:
新增JMeter元組
添加默認配置元素,添加以下默認配置,如
各默認組件配置如圖所示。
HTTP Cache Manager
HTTP Cookie管理器
HTTP請求默認值
添加HTTP Request元組 在線程組上右擊新增HTTP請求,如圖:
HTTP請求設置如圖:
新增監聽器
在這裏咱們添加以下監聽器,如圖所示
運行&查看結果
若是啓動運行jmeter,能夠單擊添加的監聽器查看運行過程當中的監控指標數據,也能夠等運行結束後,再查看。
如圖:
下面咱們就監聽器所採集的結果圖進行簡要的說明:
圖形結果
察看結果樹
用表格查看結果
聚合報告