JMeter壓力測試入門教程[圖文]

Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟件作壓力測試,它最初被設計用於Web應用測試但後來擴展到其餘測試領域。 它能夠用於測試靜態和動態資源例如靜態文件、Java小服務程序、CGI腳本、Java 對象、數據庫, FTP服務器, 等等。JMeter 能夠用於對服務器、網絡或對象模擬巨大的負載,來在不一樣壓力類別下測試它們的強度和分析總體性能。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果。爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言。php

1. 下載JMeter

官方網站下載最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JMeter 2.9,使用JMeter依賴jdk,建議安裝jdk 1.6版本。html

Linux下安裝jdk參考文章:http://www.linuxeye.com/Linux/Linux-install-JDK.htmllinux

Windowns下安裝jdk同Linux下安裝相似,這裏就不介紹了。正則表達式

2. 啓動JMeter

這裏就在win下進行,圖形界面較爲方便
在目錄apache-jmeter-2.9\bin 下能夠見到一個jmeter.bat文件,雙擊此文件,即看到JMeter控制面板。數據庫

3. 運行預準備

如今來對LinuxEye進行壓力測試,壓力測試對象爲隨機的幾個網頁連接,這幾個連接是寫在一個文本文件中的,在壓力測試的時候會隨機讀取。apache

1) 創建一個線程組,以下圖

爲何要創建線程組?緣由很簡單,由於咱們要模擬多個線程(用戶)來訪問LinuxEye。線程屬性部分中,線程數是啓動多少個線程,我這裏填寫的是10,Ramp-Up Period (in seconds)表示線程之間間隔多少時間容許,單位是秒,好比若是填寫10,那麼10/10=1表示10個線程間每隔1秒鐘請求網站。循環次數:60個線程運行完畢算是一次,循環次數就是這樣的一個請求過程運行多少次,我這裏測試就填寫的是2。每次修改一個設置後,別忘記了保存一下。服務器

2) 設置請求服務器、壓力連接等信息

接下來很天然的是,咱們要測試的網站地址是什麼?連接是什麼?因此如今咱們就來設置這些信息。右鍵點擊咱們剛建立的線程組,在彈出的菜單中,選擇添加->Sampler->Http請求,彈出以下圖界面:網絡

路徑:併發

假如你只是對一個連接進行壓力測試,直接填寫一個連接就ok,好比 http://www.linuxeye.com,可是大多數狀況下都不是這樣的,咱們這裏須要多個連接,就如同剛開始講到的那樣,咱們要將多個連接保存到一個文本文件中,而後隨機讀取進行壓力測試。咱們能夠這麼作,如圖:工具

在選擇一個功能下拉列表中選擇_StringFromFile,而後在本機新建一個測試文件C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,在第一行(你也能夠不在第一行)的值中填寫測試文件的路徑,以下圖:

而後點擊「生成」按鈕,在生成按鈕的左邊文本框中將生成一個字符串如:

${__StringFromFile(C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,,,)}

在test.txt測試文件中,咱們每行寫一個URL連接,以下格式:

  1. /command
  2. /linuxrumen
  3. /program
  4. /jianzhan
  5. /command/cat.html
  6. /command/chmod.html
  7. /command/lsattr.html

注意,每行前面並無http://www.linuxeye.com這樣的信息,由於咱們在前面已經填寫了服務器地址爲www.linuxeye.com,這裏就不必再爲每一個url填寫這個相同前綴了;另外,上面的url格式也只是個例子,表示域名後的部分。

這樣一來,當咱們並不是請求的時候,就會從test.txt中隨機選擇url來進行壓力測試。

另外值得注意的一個地方是,若是參數中有中文的狀況,運行的時候可能會出現亂碼,這個時候就須要注意你在Jmeter中的編碼設置與你要請求的網頁編碼是一致的。

路徑文本框下面的選項,能夠按默認的就成,Use multipart/form-data for HTTP POST是當請求中有附件的狀況,通常狀況下都不用選中的。

3) 查看運行結果

鼠標右鍵點擊線程組,在彈出的菜單中選擇添加->監聽器->用表格查詢結果,以下圖:

4. 運行

固然,在運行前,請把全部修改都保存好

運行後的結果表格以下:

各屬性以下:

  • Sample:每一個請求的序號
  • Start Time:每一個請求開始時間
  • Thread Name:每一個線程的名稱
  • Label:Http請求名稱
  • Sample Time:每一個請求所花時間,單位毫秒
  • Status:請求狀態,若是爲勾則表示成功,若是爲叉表示失敗。
  • Bytes:請求的字節數

若是Status爲叉,那很顯然請求是失敗了,但若是是勾,也並不能認爲請求就必定徹底成功了,由於還得看Bytes的字節數是不是所請求網頁的正常大小值,若是不是則說明發生了丟包現象,也不是徹底成功。

在下面還有幾個參數:

  • 樣本數目:也就是上面所說的請求個數,成功的狀況下等於你設定的併發數目乘以循環次數
  • 平均:每一個線程請求的平均時間
  • 最新樣本:表示服務器響應最後一個請求的時間
  • 偏離:服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分佈(這個我不是很理解)。

術語:

    1. 線程組:測試裏每一個任務都要線程去處理,全部咱們後來的任務必須在線程組下面建立。能夠在「Test Plan(鼠標右擊) -> 添加  ->Threads(Users) -> 線程組」來創建它,而後在線程組面板裏有幾個輸入欄:線程數、Ramp-Up Period(in seconds)、循環次數,其中Ramp-Up Period(in seconds)表示在這時間內建立完全部的線程。若有8個線程,Ramp-Up = 200秒,那麼線程的啓動時間間隔爲200/8=25秒,這樣的好處是:一開始不會對服務器有太大的負載。
    2. 取樣器(Sampler):能夠認爲全部的測試任務都由取樣器承擔,有不少種,如:HTTP請求。
    3. 斷言:對取樣器返回的請求結果給出判斷是否正確。
    4. monitor:它的功能是對取樣器的請求結果顯示、統計一些數據(吞吐量、KB/S……)等
相關文章
相關標籤/搜索