1. 程式人生 > >JMeter壓力測試入門教程[圖文]

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

https://blog.linuxeye.com/335.html

Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試但後來擴充套件到其他測試領域。 它可以用於測試靜態和動態資源例如靜態檔案、Java小服務程式、CGI指令碼、Java 物件、資料庫, FTP伺服器, 等等。JMeter 可以用於對伺服器、網路或物件模擬巨大的負載,來在不同壓力類別下測試它們的強度和分析整體效能。另外,JMeter能夠對應用程式做功能/迴歸測試,通過建立帶有斷言的指令碼來驗證你的程式返回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正則表示式建立斷言。

1. 下載JMeter

2. 啟動JMeter

這裡就在win下進行,圖形介面較為方便
在目錄apache-jmeter-2.9\bin 下可以見到一個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\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……)等