1. 程式人生 > >只需4步,LoadRunner輕鬆實現大負載測試!省時省力

只需4步,LoadRunner輕鬆實現大負載測試!省時省力

敏捷的技術時代需要測試開發者在提高產品質量的同時,能夠縮短髮布時間和精簡工作流程。研發人員們現在正在短時間內自己完成端到端的週期,並不斷髮布新的修復和功能。

測試開發人員節省時間的方式之一是儘可能多的重複使用現有的指令碼。這節省了建立新指令碼的時間,並且還實現了自動化。

通常情況下,你可以通過很多可用的工具來對一個應用軟體進行測試並可以得到有關效能級別和臨界點等方面的報告。像大多數工具一樣,你要先退出你所執行的東西並對測試做徹底的準備。我們今天就來聊一聊一個常用工具LoadRunner如何在大負載下進行測試?

首先,什麼是負載測試?

負載測試是通過逐步增加系統負載,測試系統性能的變化,並最終確定在滿足效能指標的情況下,系統所能承受的最大負載量的測試,例如,訪問一個頁面的響應時間規定不超過1秒,負載測試就是測試在響應時間為1秒時,系統所能承受的最大併發訪問使用者的數量。

負載測試的目標是確定並保證系統在超出最大預期工作量的情況下仍能正常執行,還能評估系統的效能特徵。

下面介紹一下關於負載測試的幾個基本概念:

吞吐率:伺服器併發處理能力的量化描述(單位reqs/s),單位時間內處理的請求數。

併發連線數:某一個時間點允許最大的請求數量,這個常用來衡量系統的併發處理請求的能力,應該區分與下面的併發使用者數。

併發使用者數:一個使用者可能會產生多個併發連線,例如IE8目前支援6個併發連線。

使用者請求平均時間:大量使用者請求從發起到接收到處理結果的一個平均時間,在web頁面預設不超過3秒是最佳的使用者體念。

伺服器平均處理請求時間:處理完成一個請求所用的平均時間,這個指標可用來衡量業務邏輯複雜度和機器的效能指標。

再來了解下,什麼是LoadRunner?

LoadRunner是一款適用於多種軟體體系架構的負載測試工具,從使用者關注的響應時間、吞吐量,併發使用者數和效能計數器等方面來衡量系統的效能表現,輔助使用者進行系統性能優化。

原理:LoadRunner通過模擬成千上萬使用者實施併發負載及實時效能監測的方式來確認和查詢問題,優化效能和加速應用系統的釋出週期。

組成:LoadRunner主要包括三個前臺功能元件,分別為VuGen(虛擬使用者指令碼生成器)、Controller(測試控制器)和Analysis(結果分析器)。系統會自動呼叫後臺功能元件LG(負載生成器)和Proxy(使用者代理)來完成效能測試工作。

如何使用LoadRunner實現大負載測試?

第一步:配置系統引數

大併發使用者的情況下,會出現如下問題:

1)當採用netstat命令時,看到很多Socket處於“WAIT”狀態

2)負載增大時連線失敗

3)mmdrv的控制代碼數 隨著虛擬使用者的執行而增加

4)當建立連線時出現"No buffer space available"錯誤資訊

解決方法

編輯以下注冊表項:

1.為了避免出現“No Buffer Space Available”的錯誤,需要進行如下配置:
1)修改登錄檔:
* 設定“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par
ameters\TcpTimedWaitDelay”為 30
* 設定“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par
ameters\MaxUserPort”為 65534
* 在“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session
Manager\Sub Systems\Windows”設定SharedSection 為 4096 
2)通過在每個指令碼的開頭新增如下函式來設定“SHUTDOWN”模式為"ABRUPT"
web_set_sockets_option(“SHUTDOWN_MODE”,”ABRUPT”)

第二步:配置LR

1)指令碼執行時設定

訊息處理時勾選"send message only when error occurs"

禁用snapshot on error

"define each step as a transaction"取消勾選

取消"simulate browser cache"勾選, 勾選“simulate new user on each iteration”和它的子選項

2)將指令碼中web_url函式中的"Mode=HTML"預設方式改為"Mode=HTTP",這將減小LG機器上的壓力(不解析HTML)

3)將在controller的diagnostics->configuration中,禁止web page breakdown

4)在Controller通過Tools > Options > Run-Time Settings限制同一時間在所有LG上初始化虛擬使用者的數值,設定會被每臺LG獲得,這樣做的目的是為了避免在指令碼執行的初始階段LG系統資源的過度利用.

5)限制controller在執行時儲存的錯誤數.通過修改wlrun.ini中的[output]項來實現:
• FlagLimitOutputMessages=1
• MaxNumberOfOutputMessages=<errors count> (default is 10,000)

6)在Controller通過Tools>Options>Monitors修改monitor的取樣率,這將減小測試執行時Controller的CPU利用率,如下圖所示:

7)修改wlrun7.ini中的ExportMessagesToFile=1重定向輸出資訊到.txt檔案而不是到MDB檔案

此外:關閉Controller和LG上的防病毒,防間諜軟體,關於執行在以上電腦上不要的Windows服務;在Controller不要執行虛擬使用者;不要頻繁開啟Error/Output視窗,因為這將增加額外Controller上額外的資料庫連線數這些都是對進行成功的大負載測試的有益的建議。

第三步:修改指令碼

1)在負載測試時,保證Controller和Generator的網路通訊非常重要,大量的資訊(error message,output message)大併發負載測試有著很大的負面影響

如以下兩例

把指令碼中所與列印資訊的指令碼去掉.如下面的程式碼每次迭代都會呼叫一次,對大量併發使用者的執行產生負面的影響.

Controller處理所有虛擬使用者的資訊,這樣會大大降低Controller的效能. 如下是類似的程式碼:

這些語句都僅僅應該出現在指令碼除錯時而不應該出現在負載測試時的指令碼中,在正式的負載測試前,註釋掉這些語句。

2)去掉指令碼中所有的sleep()的呼叫,用lr_think_time()來代替.lr_think_time給LR讓出控制,即LR能夠在Vuser休眠的時候去做其他有用的事情.不要去掉lr_think_time:使用該函式能更準確的模擬負載,對LG產生相對小的壓力

3)web_reg_save_param和web_reg_find()函式:
在 web_reg_save_param() 中新增“Notfound=empty” 引數.
在 web_reg_find() 新增 "Savecount=some_parameter_name". 如果你想知道它是否成功可以使用atoi(lr_eval_string("{some_paramater_name }"))來衡量.

第四步:設定組策略

大負載測試時會有以下情況發生:

●產生很多錯誤,資料量大於1GB

●假如每秒產生1000條左右錯誤的話,Controller的行為將很難預測

●壓力測試產生很多執行資料

這些問題可以通過設定一個合理的組策略避免,以下舉一個例子說明

場景為1000個虛擬使用者,用一個Group執行

這時把這個Group分為兩個Group:

G1-〉100 Vusers

G2-〉900 Vusers

這兩個組可以跟原始的組產生一樣的負載,對於G2在組命令列中新增如下引數:
-disable_data -disable_messages
_disable_data : 讓這個組不傳送任何資訊,不傳送任何online資訊,不寫任何offline資訊.
_disable_message: 讓這個組不給Controller傳送任何資訊(錯誤,日誌)
注意:使用上面的命令列選項會使該LG不給congtroller傳送online和offline資訊.這樣這個組上的虛擬使用者的分析資料就收集不到了.

總結:

通過一段時間的學習發現,結合LR自帶的使用手冊,以及在網上找的N多資料,多看學習視訊,然後多動手操作。慢慢的LR的一些操作步驟就會做的,所謂熟能生巧就是這回事情,至於分析結果這塊所涉及的東西很多,這個要靠長期的經驗的積累和學習。堅持做做多學多問,就很收穫良多。加油!

歡迎加入  51軟體測試大家庭,在這裡你將獲得【最新行業資訊】,【免費測試工具安裝包】,【軟體測試技術乾貨】,【面試求職技巧】... 51與你共同學習,一起成長!期待你的加入: QQ                     群:                    755431660