Jmeter是一款強大的圖形界面壓力測試工具,完全用Java寫成,關於Jmeter的介紹,網上其實有不少的文章,我原本是不想再重復寫類似文章的,但我發現有些很關鍵性的,在我們測試中一定會用到的一些設置或操作很少見到有文章寫清楚的,比如有這樣的一個常見問題:如何對一個網站的多個鏈接進行壓力測試?因為通常情況下,我們要測試的不是一個鏈接,假如我們測試的是某一網站的話,而這些鏈接我們通常都是寫入到一個文本文件中,測試的過程中,會隨機讀取文件中的鏈接進行壓力測試,我們所熟知的一些壓力測試工具,例如Siege就可以這樣干。
在我使用Jmeter的過程中,我發現我周圍有之前使用過Jmeter的同事,但即使如此,他們對如何將多個鏈接寫入到文本文件中並隨機讀取進行壓力測試也不清楚,故我打算還是在有空的時候寫一篇這樣的文章,以方便使用者。
一、 官方網址
http://jakarta.apache.org/jmeter/
二、 運行
下載解壓后,在目錄jakarta-jmeter-2.4\bin下可以見到一個jmeter.bat文件,雙擊此文件,打開初始界面如下圖:
注意的是上面顯示的是中文,如果你想使用其他語言,比如英文,那么通過菜單選項->選擇語言->英文即可,當然轉為中文也是同樣操作。
三、 運行預准備
我們現在要對子猴博客來進行一番壓力測試,壓力測試對象為隨機的幾個網頁鏈接,這幾個鏈接是寫在一個文本文件中的,在壓力測試的時候會隨機讀取。
1、 建立一個線程組,如下圖
為什么要建立線程組?原因很簡單,因為我們要模擬多個線程(用戶)來訪問網站。
線程組創建界面如下圖:
名稱可以隨意填寫,默認選中“繼續”即可。
線程屬性部分中,線程數是啟動多少個線程,我這里填寫的是60,Ramp-Up Period (in seconds)表示線程之間間隔多少時間允許,單位是秒,比如如果填寫120,那么120/60=2表示60個線程間每隔2秒鍾請求網站。
循環次數:60個線程運行完畢算是一次,循環次數就是這樣的一個請求過程運行多少次,我這里填寫的是1000.
每次修改一個設置后,別忘記了保存一下。
2、 設置請求服務器、壓力鏈接等信息
接下來很自然的是,我們要測試的網站地址是什么?鏈接是什么?所以現在我們就來設置這些信息。
右鍵點擊我們剛創建的線程組,在彈出的菜單中,選擇添加->Sampler->Http請求,彈出如下圖界面:
名稱:隨意填寫
注釋:可有可無
服務器名稱或IP:我這里填寫 zihou.me
端口號:我這里填寫80
Timesout部分可以不填
HTTP請求部分的協議:http,方法我選擇的是GET,Content encoding我填的是UTF-8.
路徑:
這里值得一提的就是這個路徑,假如你只是對一個鏈接進行壓力測試,那么這里就非常簡單了,你就直接填寫一個鏈接就夠了,比如http://www.zihou.me,但很多情況下都不是這樣的,我們這里需要多個鏈接,就如同剛開始講到的那樣,我們要將多個鏈接保存到一個文本文件中,然后隨機讀取進行壓力測試。我們可以這么干,如圖:
打開界面如下圖:
在選擇一個功能下拉列表中選擇_StringFromFile,然后在本機新建一個測試文件text.txt,在第一行(你也可以不在第一行)的值中填寫測試文件的路徑,如下圖:
然后點擊“生成”按鈕,在生成按鈕的左邊文本框中將生成一個字符串如:
${__StringFromFile(E:\test\test.txt,,,)}
在測試文件中,我們每行寫一個URL鏈接,如下格式:
2011/03/26/3054
2011/03/26/3052
2011/03/26/3042
2011/03/25/3040
2011/03/25/3034
2011/03/24/3027
注意,每行前面並沒有http://www.zihou.me這樣的信息,因為我們在前面已經填寫了服務器地址為zihou.me,這里就沒必要再為每個url填寫這個相同前綴了;另外,上面的url格式也只是個例子,表示域名后的部分,但很多時候url后面跟的都是各參數,比如http://www.zihou.me/p?a=1&b=3,如果是這種情況,則上面的鏈接可以寫為:
a=1&b=3這樣的形式。
現在我們可以來填寫前面所說的路徑了,如下:
/ ${__StringFromFile(E:\test\test.txt,,,)}
這樣一來,當我們並非請求的時候,就會從test.txt中隨機選擇url來進行壓力測試。
另外值得注意的一個地方是,如果參數中有中文的情況,運行的時候可能會出現亂碼,這個時候就需要注意你在Jmeter中的編碼設置與你要請求的網頁編碼是一致的。
路徑文本框下面的選項,可以按默認的就成,Use multipart/form-data for HTTP POST是當請求中有附件的情況,一般情況下都不用選中的。
同請求一起發送參數部分:
如果你僅僅是對某一個固定的頁面進行壓力測試,那你就可以不用進行上面所說的在文本文件中設置URL的過程了,直接在這里設置就行了,這里的名稱就是參數名,值就是參數值,在這里添加就OK了,但你如果是壓力多個鏈接,那這里你可以不用填。
3、查看運行結果
上面設置好后,接下來很自然的想到如何查看運行結果呢?Jmeter在這方面提供了好些個查看方式,有表格形式,有曲線形式等等,我個人認為查看表格形式就足夠了!
鼠標右鍵點擊線程組,在彈出的菜單中選擇添加->監聽器->用表格查詢結果,如下圖:
彈出界面如下圖:
當然,你也可以選擇其他查看方式,你也可以看到在監聽器菜單中,有好多種方式。
四、 運行
好了,現在我們終於可以運行了!
選擇菜單項運行->啟動,如下圖:
當然,在運行前,你得把所有修改都保存了。
運行后的結果表格如下:
各屬性如下:
Sample:每個請求的序號
Start Time:每個請求開始時間
Thread Name:每個線程的名稱
Label:Http請求名稱
Sample Time:每個請求所花時間,單位毫秒
Status:請求狀態,如果為勾則表示成功,如果為叉表示失敗。
Bytes:請求的字節數
如果Status為叉,那很顯然請求是失敗了,但如果是勾,也並不能認為請求就一定完全成功了,因為還得看Bytes的字節數是否是所請求網頁的正常大小值,如果不是則說明發生了丟包現象,也不是完全成功。
在下面還有幾個參數
樣本數目:也就是上面所說的請求個數,成功的情況下等於你設定的並發數目乘以循環次數。
平均:每個線程請求的平均時間
最新樣本:表示服務器響應最后一個請求的時間
偏離:服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布(這個我不是很理解)。
在上面的參數中,我個人認為只要看Status和Bytes這兩個就夠了。
好了,主要的就介紹這么多了,其實Jmeter做壓力測試的范圍遠遠不止於對Web,它還可以用於Java小服務程序、CGI 腳本、Java 對象、數據庫, FTP 服務器等等,更多的使用可以根據自己的需要去研究掌握。
最后還提到的一點是:你一定注意到了,HTTP請求和結果查看都是在線程組這一節點下創建的,其實,你也可以不用一定要在線程組下創建,你在測試計划下建立也可以,但創建在線程組下面可以使得我們的測試意圖一目了然,也就是我們的HTTP請求和結果查看都是基於我們設定的線程組的。