做軟體測試,專項測試是必不可少的一部分任務。

那麼接下來我要對我們的測試伺服器進行壓力測試,包括登錄前的頁面和登錄後的頁面,主要目的是測試負載均衡的實現效果。在網上也參考了不少資料,我把能踩的坑都踩了一遍,也算是能從坑裡爬出來了,至少是能實現了當初的目標。

安裝Jmeter

我用的版本是3.0版本,在這裡建議大家和我一樣,不要輕易使用最新版本,次新版本就可以了,因為最新版本有可能和其他插件和環境還不能很好兼容。至於怎麼安裝就不闡述了,網上有大把的教程。要注意的是,由於Jmeter是用Java語言編寫的,所以同時也要把java環境部署好。安裝好了之後,Jmeter的bin目錄下有個Jmeter.bat文件,雙擊就能運行了。

首次打開Jmeter頁面

未登錄測試

運行軟體之後,我們右擊「測試計劃」——「添加」——「Threads(Users)——線程組」,這樣就建好了一個線程組了,作用當然是用來跑線程

有了線程組之後,我們再右擊線程組,「添加」——「配置元件」——「http請求默認值」,在這裡面可以設置一些常用的默認的設置,這裡我輸入我們的測試伺服器的IP或域名,這裡我輸入「10.1.xx.xx」,埠號則輸入「6502」,(因為我要測試的地址是:10.1.xx.xx:6502)協議是「http」,如果要測試的網址是https開頭那就填「https」,其他則默認,這時候點擊左上角保存會彈出一個保存框,這是讓你保存你現在所做的測試配置,以後需要再測試的話的直接打開保存的jmx文件就行了。

保存完了之後,我們再右擊「線程組」——「添加」——「Sampler」——「http請求」。這裡和剛才的「http請求默認值」不是一樣的嗎?剛剛那個只是默認值,只是用來設置一些默認配置。真正發起請求的是「http請求」,在http請求裡面我們在「路徑」裡面輸入斜槓「/」就ok了,表示默認路徑,IP那一欄就不用輸入了。這是因為在http請求默認值裡面已經輸過IP地址,以後可以新建多個http請求,只要修改路徑就行了,這樣就可以訪問同一個網站的不同頁面,這就是「http請求默認值」的意義所在,把一些共用的設置寫一遍就好了。

接著,我們再右擊「線程組」——「添加」——「監聽器」——「察看結果數」,在這裡可以查看到http請求和結果。每次新建組件和修改配置信息都要點擊保存,頁面配置圖如下所示:

http請求默認值

http請求

接下來點擊工具欄的綠色運行按鈕,就可以在「察看結果樹」中看到結果了。

察看結果樹的結果

我們新建的「http請求」返回結果200,表明請求成功,從綠色打鉤也能看出,上圖中的下拉列表框可以選擇顯示格式,我們選擇HTML,切換到「響應數據」就可以看到返回的頁面。

設置線程並發數

接下來點擊「線程組」可以看到線程組的設置頁面,默認設置是1個線程,1秒啟動,循環1次。線程數表示啟動多少個線程,Ramp-Up Period表示花多長時間啟動所有線程,循環次數表示每個線程的執行次數。例如,我設置線程數為3,Ramp-Up Period為6,循環次數3,表示軟體將在6秒內啟動3個線程,也就是2秒啟動1個線程,每個線程執行3次請求。

線程並發設置

此外還可以勾選「調度器」,比如我填入持續時間50,啟動延遲0,將循環次數勾選「永遠」,表示線程立即啟動,執行50秒後停止。要注意,如果設置了持續時間和啟動延遲,那麼下面的啟動時間和結束時間就不起作用了,就不用管了,點擊運行即可。

設置其他監聽器

之前僅僅設置了「察看結果樹」這個監聽器,這時候可以右擊「線程組」——「添加」——「監聽器」,裡面有很多監聽器可供選擇,比如圖形結果,用表格查看結果,聚合報告等等,這些都是反映測試過程的指標數據。圖形結果以圖形的形式顯示吞吐量、偏移、平均值等信息,表格結果顯示每一次請求的時間,返回,發送位元組數,連接時間等等,聚合報告裡面顯示總體請求的吞吐量,錯誤率等等。下圖為表格結果的樣式。

用表格察看結果

可以看出,圖中顯示了9個Http請求,分別由3個線程執行,每個線程執行3次,正好符合我們對於線程組的設置。圖中每一列的含義分別表示請求序號,開始時間,線程序號,請求名,請求所花的時間,請求狀態,請求位元組數,發送位元組數,等待時長,連接時間。

聚合報告如下圖所示,每一列的含義分別表示請求名稱,請求總數,請求的平均響應時間(毫秒),50%的請求的響應時間,90%的請求的響應時間,95%的請求的響應時間,99%的請求的響應時間,最小的響應時間,最大的響應時間,錯誤的請求率(錯誤請求數/總的請求數),吞吐量(每秒處理的請求數),接收的位元組速率,發送的位元組速率。

聚合報告

登錄測試

前面我測試的頁面是不需要登錄的,現在來測試一下登錄的操作。關於登錄需要的參數,一般來說就是用戶名和密碼,但是往往還需要其他參數,我們可以通過抓包工具Fiddler進行抓包,我們在網站中進行一次正常登錄,可以在Fiddler中看到登錄需要的post參數。例如我這裡的Fiddler中顯示我的測試頁面登錄操作post參數有txtUserName, txtUsePws, 那麼需要在「http請求」或「http請求默認值」裡面填入,下圖所示。

點擊「添加」按鈕就可以添加參數了,保存好後,我們點擊運行,就可以在察看結果樹中看到登錄成功後的頁面了,具體的操作和前面一樣的。

會話保持

進入登錄後的頁面後,還想訪問例如「個人信息」,「個人設置」等模塊,這些網頁需要登錄成功後才能訪問到,這裡就需要進行會話的保持,我們右擊「線程組」——「添加」——「配置元件」——「http cookie管理器」,要添加的內容我們可以在察看結果樹的「請求」選項卡裡面看到,裡面可以看到登錄需要的cookie,如果沒有找到cookie或cookie為空,就不用填,無須再手動配置。如圖所示。

Cookie管理器

此時,我們在http請求裡面輸入登錄後的頁面網址就可以請求成功了。

利用文件讀取訪問多個網頁

我在「http請求」的路徑裡面填入的是我要訪問的網頁,每次只能填一個。假如我想訪問好幾個網頁,例如首頁,通知頁,介紹頁等等,除了新建http請求外,我們還可以將這些網頁的地址存儲在TXT文件裏。例如在我的測試伺服器上,想要訪問Preloan/xxx, LoanManage/xxx, AfterLoan/xxx等頁面,如下:

TXT存放多個地址

網址填入後,我們在Jmeter裡面的「選項」——「函數助手對話框」——「StringFromFile」,將TXT的完整路徑貼到圖中位置,點擊生成,可以在框裏生成TXT文件的讀取路徑。

函數助手

我們將$開頭的那串路徑貼到「http請求」的路徑裡面,就可以訪問到TXT裡面的所有網頁了,如圖所示。

伺服器狀態實時監聽

上面介紹了幾個Jmeter自帶的監聽器,但是我發現,裡面顯示的指標好像都不是我特別需要的。

目前我更關心我的請求執行過程中伺服器狀態的改變,例如CPU,內存,磁碟,網路,TPS,響應時間圖等等,因為這纔是壓力測試的目的所在,伺服器狀態隨著請求增加的變化曲線纔是我們更加需要看到的。

想看到伺服器變化的曲線圖,需要下載JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar,將這兩個jar包放入Jmeter的安裝路徑下的lib/ext/下面,重啟Jmeter後,右擊「線程組」——「添加」——「監聽器」,這時候可以看到多了好多監聽器,大多數以「jp@gc」開頭的監聽器。

這裡選擇「PerfMon Metrics Collector」,裡面將會顯示伺服器的狀態信息,現在還看不到,因為要測試的伺服器需要安裝一個包,叫ServerAgent.zip,譬如我的伺服器是Windows的,我將ServerAgent在伺服器中解壓,運行裡面的StartAgent批處理文件就可以了。到這裡也要注意一點,因為這個文件是屬於Jmeter的插件,所以測試伺服器也要裝上Java的jdk文件纔可以運行起來。啟動起來後如下所示:

伺服器端的服務啟動

ServerAgent的默認埠是4444,按下圖填入伺服器的地址和埠號,以及需要監控的硬體,如CPU,內存,磁碟,網路等等。

PerfMon Metrics Collector

OK,接下來點擊運行,可以在chart下看到伺服器的狀態變化曲線如下:

Chart

其實監聽器裡面還有很多其他的曲線,比如TPS曲線,響應時間曲線等等,都可以自己添加。到這裡,基本已經實現了當初想要的指標和目的了。

題外話:

其實我發現如果是單臺伺服器測試的話,用我們測試伺服器自帶的性能監視器會更好用,數據也更全面一些。不過不同公司的測試環境不一樣,按自己的需求來走就好。

性能監視器


推薦閱讀:
相關文章