學習本教程前,你的電腦上至少應該有Apache JMeter這款軟件。若是你沒有,點擊此處下載。web
當你點進去後,你會發現它是一個依賴Java的軟件正則表達式
所以若是你電腦上沒有Java環境,你應該首先安裝它,而後才能在你的電腦上使用JMeter。(本文不提供安裝Java環境的步驟,若是你不會安裝,請自行百度「jdk8安裝與配置」)apache
關於JMeter的下載,若是你不想了解它是怎麼實現的,下載Binaries版本便可。瀏覽器
.zip
格式的文件最好;.tgz
格式的文件下載。.zip
壓縮文件,在bin
目錄下雙擊jmeter.bat
.tgz
格式文件,在終端中進入到bin
目錄下,運行jmeter.sh
便可固然還有其餘的運行方式,以上運行方式通常在建立腳本、修改腳本時使用,文章後面會講到在執行腳本時的另外一種打開JMeter的方式。安全
測試計劃描述了JMeter運行時將會執行的一系列步驟。一個完整的測試計劃會包含一個或多個線程組、邏輯控制器、採樣器、監聽器、定時器、斷言和配置元件。服務器
1.添加/移除測試元件多線程
添加一個測試元件,先選中測試樹上的某個元件,右擊,在彈出的菜單中選擇「添加」,再在其級聯菜單中選擇一個新的元件併發
刪除一個測試元件,只須要右擊測試元件,點擊「刪除」便可。函數
2.加載和保存測試元件工具
加載元件,在須要加載的地方右擊,在菜單中選擇「合併」,再在彈出的對話框中選擇外部文件
保存元件,在須要保存的元件上右擊,在菜單中選擇「另存爲」。JMeter會保存選中的測試元件,及其下面的子測試元件。經過這種方式能夠獨立的保存某個或某些測試元件,以供後續使用。
3.配置測試樹中的測試元件
在JMeter圖形用戶界面右側,有相關元件的控制面板,能夠幫助用戶設定某個元件的行爲。
4.保存測試計劃
儘管這不是必須的,但做者強烈建議在運行測試計劃前,先保存測試計劃。選擇「文件」菜單下的「保存測試計劃」或者「保存測試計劃爲」命令。
5.運行測試計劃
選擇「運行」→「啓動」命令,或者在圖形用戶界面的右上角綠色三角形圖標
6.終止測試
左一爲「中止」,右一爲「關閉」
7.錯誤報告
JMeter會警告或者錯誤記錄到jmeter.log文件中,甚至還包括一些測試本身的信息。用戶能夠經過檢查日誌文件中是否有錯誤信息判斷是否。
1.線程組
線程組是任何測試計劃的起點,全部邏輯控制器和採樣器都必須放在線程組之下。其餘的測試元件(如監聽器)能夠被直接放在測試計劃之下。線程組就像它的名字所描述的那樣,被用來管理執行性能測試所需的JMeter線程。每個線程都會完整的執行測試計劃,並且他們之間是徹底獨立的運行,用這種多線程機制來模擬服務器應用的多用戶併發鏈接。
參數Ramp-Up Period告訴JMeter達到最大線程數須要多長時間。假定有10個線程,Ramp-Up period爲100秒,那麼JMeter就會在100秒內啓動全部10個線程,並讓它們運轉起來。每一個線程在上一個線程啓動10秒以後纔會開始運行。
Ramp-Up參數不能設定得過短,不然在測試的初始階段會給予服務器過大的壓力。也不能設定太長,不然就會發生第一個線程已經執行完畢,而最後一個線程尚未啓動的狀況(除非測試人員指望這種特殊狀況的發生)
如何找到一個合適的Ramp-Up呢?做者建議初始值能夠設定爲Ramp-Up=總線程數,後續再根據實際狀況適當增減。
默認狀況下,JMeter線程組被設定成只執行一遍,用戶能夠根據實際須要設定參數「循環次數」
調度器是一個控制運行持續狀態的元件。能夠設定測試運行的「啓動時間」和「結束時間」。測試啓動後會一直等待,直到用戶設定得啓動時間。測試運行期間,JMeter會在每一次循環結束後,檢查是否已達到結束時間。若是已經達到結束時間,JMeter會終止測試元件運行,不然JMeter會繼續下一個測試循環。
另外,用戶還能夠設置「持續時間」和「啓動延遲」兩個參數。須要注意的是,「啓動延遲」會使「啓動時間」無效,而「持續時間」會使「結束時間」無效。
2.控制器
JMeter有兩種類型的控制器:採樣器和邏輯控制器,兩者結合起來驅動測試進程。採樣器被JMeter用來向服務器發送請求。例如當測試人員想往服務器發送一個HTTP請求時,就加入一個HTTP請求採樣器。
用戶可使用邏輯控制器來控制JMeter的測試邏輯,好比什麼時候發送請求。舉個栗子,測試人員能夠插入交替控制器來輪流發送多個請求。
採樣器
採樣器發送一個請求到指定服務器,並等待服務器的請求。採樣器會按照其在測試樹中的順序去執行,還能夠用邏輯控制器來控制採樣器運行的重複次數。
Web測試中,通常用到的採樣器是HTTP Request
邏輯控制器
邏輯控制器能夠幫助用戶控制JMeter的測試邏輯。特別是什麼時候發送請求。邏輯控制器能夠改變其子測試元件的請求執行順序。
例如:若是有一個登陸請求,在整個測試過程當中只須要執行一次,在剩下的測試循環中它沒有必要執行,就可使用僅一次控制器(Once Only Controller)。
關於邏輯控制器本文以後只介紹循環控制器,若是想了解更多,請自行百度學習。
3.監聽器
監聽器的做用主要是記錄在測試期間,服務器返回的信息、以及請求響應時間等一些參數,方便得爲用戶展現它們。
4.定時器
默認狀況下,JMeter線程在發送請求之間是沒有間歇。當添加了某種定時器後,請求之間就有了間隔時長。
5.斷言
用戶可使用斷言來檢查從服務器得到的響應內容是否與指望相符。
例如:測試人員能夠斷言某個查詢的響應結果是否包含特定的文字。測試人員可使用Perl格式的正則表達式來匹配響應結果。
6.配置元件
配置元件與採樣器緊密關聯。它能夠記錄或者設置採樣器中的一些信息。
例如:「用戶定義的變量」能夠定義一個服務器地址的變量,在採樣器中能夠經過「${變量名}」的方式獲取到變量的值。
7.前置處理器
前置處理器會在採樣器發出請求以前作出一些特殊操做。若是前置處理器附着在某個採樣器之下,那麼它只會對該採樣器起做用。
8.後置處理器
後置處理器會在採樣器發出請求以後作出一些特殊操做。
1.JMeter執行順序規則
JMeter執行順序規則以下:
只有看成用域內存在採樣器是,定時器、斷言、前置/後置處理器纔會被執行。
例如,在以下測試計劃中:
Controller Post-Processor 1 Sampler 1 Sampler 2 Timer 1 Assertion 1 Pre-Processor 1 Timer 2 Post-Processor 2
執行順序爲:
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-processor 2
Assertion 1
Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-processor 2
Assertion 1
2.做用域規則
監聽器、配置元件、前置處理器、後置處理器、斷言、定時器做用於其父級或父級的相關子級測試元件。
邏輯控制器會對其子級起做用,好比採樣器。
上圖中:
3.屬性和變量
JMeter屬性統必定義在jmeter.properties文件中。屬性能夠在測試腳本的任何位置訪問(全局)。變量對於測試線程而言是局部變量。
大可能是變量都是經過函數調用和測試元件(如用戶定義變量)來設置的。
4.參數化
參數化是指爲某個請求設置參數和值得過程。在測試中,好比你的系統設置了用戶不能同時在線,則測試時多個線程必須使用不一樣的用戶名和密碼組合去登陸你的系統,這時候就須要參數化你的請求。
如圖所示,這樣爲username和password兩個參數賦值,這種賦值方式爲JMeter中的函數(做爲入門教程,本文也只介紹這一個函數,想了解更多請自行百度學習),這樣在每一個線程中,JMeter都會使用不一樣的username和password去請求。
關於從文本文件中批量獲取數據的函數介紹:
準備一個txt文件,每行表示一組數據,之間用逗號隔開,以下
17666666660,123456 17666666661,123456 17666666662,123456 17666666663,123456 17666666664,123456 17666666665,123456 17666666666,123456 17666666667,123456 17666666668,123456
點擊「選項」→「函數助手對話框」,在對話框的「選擇一個功能」下拉框中選擇「_CSVRead」函數
在CSV file後面值的位置填寫文件路徑,在第二行CSV文件列號填寫列號(用 , 分割)。點擊生成後複製函數字符串到登陸對應採樣器的username值的位置,並將函數中第二個參數0改成1複製到採樣器password值得位置。
這一部分,將會介紹如何建立一個簡單的測試計劃來測試Web站點。咱們會模擬5個併發用戶,對Web站點的兩個頁面進行訪問。另外,每一個併發用戶都會運行測試兩次。所以總請求書爲5(併發用戶)x2(請求)x2(重複2次)=20HTTP請求。
添加併發用戶
在新打開的JMeter中,右擊「測試計劃」→「添加」→「Threads(Users)」→「線程組」,添加一個「線程組」
爲它起一個有意義的名稱「Apache Users」,線程數設置爲5(5個用戶併發),Ramp-Up Period(in seconds)設置爲5(5秒內啓動全部線程),循環次數設置爲2(循環測試2次)
添加默認HTTP請求屬性
右擊「線程組」→「添加」→「配置元件」→「HTTP請求默認值」。在這裏,你能夠設置你的服務器名稱或者IP,如此作,在之後的採樣器等元件中,你將沒必要輸入它們。
爲「協議」設置http
,爲服務器名稱或IP設置www.apache.org
添加對Cookie的支持
一般全部的Web測試都要支持Cookie,除非測試人員的應用系統很特別,不適用Cookie。
要添加HTTP Cookie管理器(HTTP Cookie Manager),只需簡單的選中線程組,右擊「添加」→「配置元件」→「HTTP Cookie管理器」便可。
添加HTTP請求
在測試計劃中,咱們打算髮送兩個HTTP請求,第一個是Apache主頁(https://www.apache.org),第二個是download頁面(https://www.apache.org/dyn/closer.cgi)。
首先爲線程組添加第一個HTTP請求(「添加」→「Sampler」→「HTTP 請求」),接着選中該HTTP請求,並編輯其屬性。
(1) 將「名稱」改成「Home Page」(2) 將「路徑」設置爲 「/」
注意此處不須要設置協議、服務器名稱或IP、端口號,由於在以前咱們添加了「HTTP請求默認值」。
接下來,添加第二個HTTP請求,並編輯其屬性
(1) 將「名稱」改成「Download Page」(2) 將「路徑」設置爲「/dyn/closer.cgi」
添加監聽器用於查看/存儲測試結果
測試人員爲測試計劃添加的最後一個測試元件就是監聽器,它能夠把全部的HTTP請求結果存儲在一個文件中,並提供可視化的模型加以展現。
選中線程組,「添加」→「監聽器」,能夠在其級聯菜單中選擇監聽器類型,這裏咱們添加「圖形結果」、「查看結果樹」、「Aggregate Graph」、「Response Time Graph」這四個監聽器。
到這裏,你親手建立的測試計劃就完成了,你能夠運行它並經過點擊監聽器查看測試結果。
你能夠像上部分那樣手動建立一個測試計劃,但這樣工做量大、出錯率高等缺點,錄製測試腳本能夠避免這些缺點。
JMeter常見的錄製腳本方式有兩種:使用代理錄製、使用Badboy工具錄製。其中代理錄製目前不支持錄製HTTPS協議,緣由在於HTTPS是安全協議,代理沒法破譯其通訊內容,並錄製請求參數或者Cookie。爲了學習成本考慮,本文將不講述代理錄製。
使用Badboy錄製腳本
安裝並運行Badboy
你能夠經過訪問http://www.badboy.com.au/download/add下載最新版本的Badboy,安裝並運行它。
使用Badboy錄製
首次啓動Badbody時,錄製按鈕默認處於選中狀態,以下圖所示中的紅色小圓點。
在Bodboy地址欄中輸入測試網址,而後按回車鍵。Badboy工具會使用內置的瀏覽器訪問對應的網址,以下圖所示:
在Badboy工具打開的頁面中完成各項操做後。你能夠在左側看到錄製的腳本,並對它們進行操做
錄製完成後,點擊紅色小圓點中止錄製
導出Badboy測試腳本
在Badboy中完成腳本錄製後,能夠將測試腳本導出成JMX格式(File→Export to JMeter ...),這樣你就能夠在JMeter中打開並作諸如添加監聽器、修改腳本等修改,並運行它們。
前面咱們講到在JMeter中建立和編輯腳本,固然你也用點擊「開始」按鈕(綠色箭頭)的方法運行了腳本,這些都是在圖形化界面中進行,圖形化界面有直觀、易用等優勢,但它卻能給你的性能帶來很差的效果,所以這部分講讓你會使用命令行的方式去調用JMeter進行測試。
你能夠本身建立測試計劃,也能夠經過錄制獲得一個測試計劃,它們一般被保存成.jmx
格式,這裏假設你的.jmx
文件全稱爲「demo.jmx」
jmeter -n -t demo.jmx -l demo.jtl
後回車,等待片刻即可完成測試。jmeter -n -t demo.jmx -l demo.jtl
後回車,等待片刻即可完成測試。結果分析通常須要使用圖形化界面,在圖形化界面中執行「文件」→「打開」命令,打開.jmx
文件。
而後點擊你想查看結果的監聽器,在下圖所示位置點擊「瀏覽」,添加.jtl
文件便可查看到測試結果。(若是有圖像展現,須要切換到「Graph」標籤)