JMeter壓力測試入門教程[圖文]
JMeter壓力測試入門教程[圖文]
Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試但後來擴展到其他測試領域。 它可以用於測試靜態和動態資源例如靜態文件、Java小服務程序、CGI腳本、Java 對象、資料庫, FTP伺服器, 等等。JMeter 可以用於對伺服器、網路或對象模擬巨大的負載,來在不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter能夠對應用程序做功能/回歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正則表達式創建斷言。
1. 下載JMeter
官方網站下載最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JMeter 2.9,使用JMeter依賴jdk,建議安裝jdk 1.6版本。
Linux下安裝jdk參考文章:http://www.linuxeye.com/Linux/Linux-install-JDK.html
Windowns下安裝jdk同Linux下安裝類似,這裡就不介紹了。
2. 啟動JMeter
這裡就在win下進行,圖形界面較為方便
在目錄apache-jmeter-2.9in 下可以見到一個jmeter.bat文件,雙擊此文件,即看到JMeter控制面板。3. 運行預準備
現在來對LinuxEye進行壓力測試,壓力測試對象為隨機的幾個網頁鏈接,這幾個鏈接是寫在一個文本文件中的,在壓力測試的時候會隨機讀取。
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
ootDesktopapache-jmeter-2.9 est.txt,在第一行(你也可以不在第一行)的值中填寫測試文件的路徑,如下圖:
然後點擊「生成」按鈕,在生成按鈕的左邊文本框中將生成一個字元串如:
${__StringFromFile(C:Users
ootDesktopapache-jmeter-2.9 est.txt,,,)}
在test.txt測試文件中,我們每行寫一個URL鏈接,如下格式:
- /command
- /linuxrumen
- /program
- /jianzhan
- /command/cat.html
- /command/chmod.html
- /command/lsattr.html
注意,每行前面並沒有http://www.linuxeye.com這樣的信息,因為我們在前面已經填寫了伺服器地址為http://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的位元組數是否是所請求網頁的正常大小值,如果不是則說明發生了丟包現象,也不是完全成功。
在下面還有幾個參數:
- 樣本數目:也就是上面所說的請求個數,成功的情況下等於你設定的並發數目乘以循環次數
- 平均:每個線程請求的平均時間
- 最新樣本:表示伺服器響應最後一個請求的時間
- 偏離:伺服器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布(這個我不是很理解)。
術語:
- 線程組:測試里每個任務都要線程去處理,所有我們後來的任務必須在線程組下面創建。可以在「Test Plan(滑鼠右擊) -> 添加 ->Threads(Users) -> 線程組」來建立它,然後在線程組面板里有幾個輸入欄:線程數、Ramp-Up Period(in seconds)、循環次數,其中Ramp-Up Period(in seconds)表示在這時間內創建完所有的線程。如有8個線程,Ramp-Up = 200秒,那麼線程的啟動時間間隔為200/8=25秒,這樣的好處是:一開始不會對伺服器有太大的負載。
- 取樣器(Sampler):可以認為所有的測試任務都由取樣器承擔,有很多種,如:HTTP請求。
- 斷言:對取樣器返回的請求結果給出判斷是否正確。
- monitor:它的功能是對取樣器的請求結果顯示、統計一些數據(吞吐量、KB/S……)等
推薦閱讀:
※性能測試工具 JMeter 入門基礎
※Jmeter性能測試系列-場景用例設計
※Jmeter實踐-web壓力測試
※珊yo大戰-----日邢一珊VS妖yoyo,你到底支持誰?
※JMeter中的測試元件
TAG:jmeter |