性能測試入門——LoadRunner使用初探
性能測試是利用產品、人員和流程來降低應用程序、升級程序或補丁程序部署風險的一種手段。性能測試的主要思想是通過模擬產生真實業務的壓力對被測系統進行加壓,驗證被測系統在不同壓力情況下的表現,找出其潛在的瓶頸。
性能測試原理如下圖所示:
性能測試相關術語:響應時間、並發用戶數、事務響應時間、吞吐量、TPS(每秒事務響應數)、性能計數器等。
性能測試方法:負載測試、壓力測試、配置測試、並發測試、可靠性測試等。
應用領域:能力驗證、規劃能力、性能調優、缺陷發現。
性能測試工具架構一般包括:虛擬用戶腳本產生器(Virtual User Generator)、壓力產生器(player)、用戶代理(Agent)、壓力調度和監控系統(Controller)、壓力結果分析工具(Analysis)。
LoadRunner簡介
LoadRunner是一種預測系統行為和性能的負載測試工具,通過模擬實際用戶的操作行為進行實時性能監測,來幫助測試人員更快的查找和發現問題。LoadRunner適用於各種體系架構,能支持廣泛的協議和技術,為測試提供特殊的解決方案。企業通過LoadRunner能最大限度地縮短測試時間,優化性能並加速應用系統的發布周期。
LoadRunner提供了3大主要功能模塊,既可以作為獨立的工具完成各自的功能,又可以作為LoadRunner的一部分彼此銜接,與其他模塊共同完成軟體性能的整體測試,這3大模塊分別是:
l Virtual User Generator —— 用於錄製性能測試腳本
l LoadRunner Controller—— 用於創建、運行和監控場景
l LoadRunner Analysis —— 用於分析性能測試結果
LoadRunner 常用術語:
1. 場景(Scenario):即測試場景,在LoadRunner的Controller部件中,可以設計與執行用例的場景,設置場景的步驟主要包括:在Controller中選擇虛擬用戶腳本、設置虛擬用戶數量、配置虛擬用戶運行時的行為、選擇負載發生器(Load Generator)、設置執行時間等。
2. 負載發生器(Load Generator):用來產生壓力的機器,受Controller控制,可以使用戶腳本在不同的主機上執行。在性能測試工作中,通常由一個Controller控制多個Load Generator以對被測試系統進行加壓。
3. 虛擬用戶(Virtual User/Vuser):對應於現實中的真實用戶,使用LoadRunner模擬的用戶稱為虛擬用戶。性能測試模擬多個用戶操作可以理解為這些虛擬用戶在跑腳本,以模擬多個真正用戶的行為。
4. 虛擬用戶腳本(Vuser script):通過Vuser Generator錄製或開發的腳本,這些腳本用來模擬用戶的行為。
5. 事務(Transaction):測試人員可以將一個或多個操作步驟定義為一個事務,可以通俗的理解事務為「人為定義的一系列請求(請求可以是一個或者多個)」。在程序上,事務表現為被開始標記和結束標記圈定的一段代碼區塊。Loadrunner根據事務的開頭和結尾標記,計算事務響應時間、成功/失敗的事務數。
6. 思考時間(Think Time):即請求間的停頓時間。實際中,用戶在進行一個操作後往往會停頓然後再進行下一個操作,為了更真實的模擬這種用戶行為而引進該概念。在虛擬用戶腳本中用函數lr_think_time()來模擬用戶處理過程,執行該函數時用戶線程會按照相應的time值進行等待。
7. 集合點(Rendezvous):設集合點是為了更好模擬並發操作。設了集合點後,運行過程中用戶可以在集合點等待到一定條件後再一起發後續的請求。集合點在虛擬用戶腳本中對應函數lr_rendezvous() 。
8. 事務響應時間:事務響應時間是一個統計量,是評價系統性能的重要參數。定義好事務後,在場景執行過程和測試結果分析中即可以看到對應事務的響應時間。通過對關鍵或核心事務的執行情況進行分析,以定位是否存在性能問題。
LoadRunner測試流程
?規劃測試:確定測試要求,如並發用戶數量、典型業務場景流程;測試計劃;設計用例;……
?創建Vuser腳本:使用Virtual User Generator錄製、編輯和完善測試腳本。
?定義場景:使用LoadRunner Controller 設置測試場景。
?運行場景:使用LoadRunner Controller 驅動、管理並監控場景的運行。
?分析結果:使用LoadRunner Analysis 生成報告和圖表並評估性能。
規劃測試:
好的測試規劃,能夠指導整個測試過程,以更好的收集到測試目標要求的性能數據。規劃可以包括測試的計劃、用例的設計、場景的設計、性能計數器設置的設計等。
以下列出幾點規劃事項:
ü 測試用例:測試用例一般根據需要測試的功能進行設計,如監控寶登陸,創建任務等
ü 場景設計:一般情況會設計兩種加壓方式進行測試:瞬時加壓(多人同時進行某項業務操作)與逐漸加壓(多人先後進行某項業務操作,操作時間間隔根據計劃設定)。
ü 性能計數器方面:可以收集CPU時間、內存、硬碟、網路、資料庫參數等。
創建Vuser腳本—準備
Loadrunner腳本開發步驟分為:錄製基本腳本à增強/編輯腳本à配置運行時設置à試運行腳本
1、啟動LoadRunner:選擇開始à程序à HPLoadRunneràLoadRunner,打開HP LoadRunner11,如下圖所示。
2、打開VuGen:在LoadRunner Launcher窗格中,單擊Create/Edit Scripts,鏈接啟動Virtual user Generator起始頁。
3、創建一個空白Web腳本:選擇FileàNew菜單,或點擊 按鈕,打開New Virtual User對話框,顯示可供選擇腳本的協議。
對於常用的應用軟體,我們可以根據被測應用是B/S結構還是C/S結構來選擇協議。如果是B/S結構,就要選擇Web(HTTP/HTML)協議。如果是C/S結構,則可以根據後端資料庫的類型來選擇,如MS SQL Server協議用於測試後台資料庫為SQL Server的應用;對於沒有資料庫的WINDOWS應用,可以選擇Windows Sockets協議。
根據選擇協議的不同,Virtual User Generator 會使用不同的方式和界面引導用戶完成腳本的錄製。
4、錄製前的設置:選擇Web(HTTP/HTML),點擊Create按鈕,打開Start Recording對話框。選擇的協議不同,打開的窗口就會不同,實例是針對Web錄製的對話框。
VuGen的腳本分為三個部分:Vuser_init,Action,Vuser_end。其中Vuser_init和Vuser_end都只能存在一個,而Action可分成無數多個部分,可以通過點擊旁邊的【new】按鈕來創建Action。在迭代執行測試腳本時,Vuser_init和Vuser_end中的內容只會執行一次,迭代的是Action部分。
在Start Recording對話框,點擊Options按鈕,進入錄製選項設置。一般要設置以下選項:
? 基於瀏覽器的應用程序推薦使用HTML-based script。
? 不是基於瀏覽器的應用程序推薦使用URL-based script。
? 基於瀏覽器的應用程序中包含了JavaScript,並且該腳本向伺服器發送了請求,比如DataGrid的分頁按鈕等,推薦使用URL-based script。
? 基於瀏覽器的應用程序中使用了HTTPS安全協議,建議使用URL-based script。
AdvancedàSupport charset中設置編碼格式:UTF-8;
提示:錄製Web腳本時,生成的腳本中存在亂碼該如何解決?
2 新建腳本--->選擇協議(Http)-->選項-->高級-->選擇「支持字符集」並點選「UTF-8」。
2 在回放腳本之前:Vuser-->運行時設置-->瀏覽器-->瀏覽器模擬-->更改-->使用瀏覽器-->語言下來選擇 「中文(中國)」
5、錄製:在Start Recording對話框,點擊OK按鈕,開始錄製。系統自動彈出IE,載入營銷系統的登錄界面。在錄製的過程中,屏幕上有一個懸浮的錄製工具欄,是腳本錄製過程中測試人員和VuGen交互的主要平台。
通過操作被測系統,操作的每一個步驟都被記錄,在錄製的過程中,可以在相應的步驟插入action、事務、檢查點、集合點等信息。錄製完成後單擊按鈕,Loadrunner開始生成腳本,生成的腳本如圖所示。
腳本有兩種查看方式:
? Script View 可以查看全部錄製的腳本代碼(下圖)
? Tree View可以查看每個URL獲取來的頁面(下圖)
創建Vuser腳本—增強/編輯腳本
參數化:參數化的作用是在進行場景執行的時候,每個不同的虛擬用戶可以按照參數的讀取策略讀取到參數值,以模擬不同用戶在提交或者讀取不同的數據。
每個用戶在界面上讀取和提交的信息都不太相同,因此一般都需要參數化,其它與輸入信息對應的比如用戶id之類的信息也需要參數化;另外,錄製環境絕大多數情況下與執行環境不一致,因此一般需要對IP、埠或者域名做參數化。
打開腳本後,首先要確定哪些常量需要參數化。
可以看出,在web_submit_data函數中,兩條語句包含了兩個常量:用戶名和密碼。
"Name=usernam", "Value=Test123433333@sina.com", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
當我們想模擬多個不同的用戶來運行登錄腳本的時候,需要對Value= Test123433333@sina.com和Value=123456進行參數化,以e號參數化為例,參數化過程如下:
1)選中Test123433333@sina.com à右擊滑鼠à在右鍵菜單上選擇replace with a parameter。
2)在彈出窗口填寫參數名稱,或選擇一個已經存在的參數名。
常用的參數類型:
ü Data/Time:使用當前日期/時間替換所選常量。
ü Group Name:使用Vuser組的名稱替換所選常量。
ü Load Generator Name:使用Vuser腳本的負載發生器名替換所選常量。
ü Iteration Number:使用當前的迭代編號替換所選常量。
ü Random Number:使用一個隨機生成的整數替換所選常量,可以通過參數屬性設定參數的範圍。
ü Unique Number:使用一個唯一編號替換所選常量,可以通過參數屬性設定參數的第一個值和遞增的規則。
ü Vuser ID:使用運行腳本的虛擬用戶ID來代替選擇的常量。
ü File:採用外部的數據來代替,可以使用單獨的文件,也可以使用現成的資料庫中獲取數據。
ü User Defined Function:從用戶開發的dll文件中獲取數據。
3)單擊窗口的properties按鈕,設置parameter的properties。參數名稱:Username;選擇參數類型File,來寫入已準備好的數據。
文件File:參數化結束後,腳本保存的根目錄下會自動生成一個 以參數名稱命名的 參數文件;也可以直接選擇一個已準備好的參數文件。
選擇參數列Select Column:
By number:以列號為參數列。
By name:以列名為參數列。
文件格式:
Column:參數之間的分隔符:逗號、空格、Tab。
First data:從第幾行讀取數據。
選擇參數分配方法Select next row:
ü Sequential:順序的分配Vuser參數值。當正在運行的Vuser訪問數據表格時,它將會提取下一個可用的數據行。
ü Random:當腳本開始運行時,「隨機」的為每個Vuser分配一個數據表格中的隨機值。
ü Unique:為Vuser的參數分配一個「唯一」的順序值。注意,參數數量一定要大於等於「Vuser量*迭代數量」。
選擇參數更新方法Update value on:
ü Each iteration:腳本每次迭代都順序的使用數據表格中的下一個新值。
ü Each occurrence:在迭代中只要遇到該參數就重新取值。
ü Once:在所有的迭代中都使用同一個值。
當超出範圍時When out of values:(選擇數據為unique時才可用到)
ü Abort Vuser:中止。
ü Continue in a cyclic manner:繼續循環取值。
ü Continue with last value:取最後一個值。
設置完成後,被參數化的值會被參數名代替
關聯:關聯的含義是在腳本回放過程中,客戶端發出請求,通過關聯函數所定義的左右邊界值(也就是關聯規則),在伺服器所響應的內容中查找,得到相應的值,以變數的形式替換錄製時的靜態值,從而向伺服器發出正確的請求,最典型的是用於sessionID,常用的關聯技術有三種:錄製中關聯、錄製後關聯、手動關聯。
錄製中關聯:設置錄製前的recording optionsàcorrelation,可以勾選LR已有的關聯規則,也可以新建規則;錄製過程中,關聯自動在腳本體現。
錄製後關聯:關聯的使用可以在腳本錄製完成後,回放一次腳本,然後在腳本的菜單的vuseràscan script for correlations進行設置。
通過回放腳本和掃描關聯,系統嘗試找到錄製與執行時伺服器響應的差異部分,找到需要關聯的數據,並建立關聯。
手動關聯:錄製前關聯與錄製後關聯都屬於自動關聯的範疇,如果出現自動關聯不能解決的問題,就需要使用手動關聯的方法,手動關聯的一般步驟如下:
1)錄製兩份腳本,保證業務流程和使用的數據相同。
2)使用WinTiff工具比較兩份腳本,對兩份腳本中不同的地方進行判斷,找到需要關聯的數據。
3)找到左邊界和右邊界字元串,寫出關聯函數。
4)在腳本中『需要關聯的數據』前面插入關聯函數。
5)用關聯函數中定義的參數取代腳本中『需要關聯的數據』。
其他:前面講解了插入事務、插入集合點、參數化、建立關聯的方法,一般的腳本都需要做以上幾項的修改工作。此外,還可以通過插入注釋、插入檢查點來完善腳本。另外腳本出現問題了,也可以通過列印信息來調試腳本。
插入注釋:在腳本中插入注釋,可以清晰找到需要修改的位置,增強腳本的可讀性。
插入檢查點:在腳本中設置檢查點函數,將返回值的結果反映在Controller的狀態面板上和Analysis統計結果中,由此可以判斷數據傳遞的正確性。
創建Vuser腳本—配置運行時設置
在VuGen中,選擇 VuseràRun-time Settings,可以設定腳本回放過程的一些參數。如Iteration Count (迭代次數)、Think Time (思考時間)、Error Handling(錯誤處理)、Multithreading(運行方式)等。
1、Iteration Count (迭代次數)
選擇General:Run Logic
說明:設定每個Action的迭代次數。
2.Think Time (思考時間)
選擇General:Think Time
說明:設定腳本回放時對思考時間的處理方式。
Ignore think time
腳本回放時,將不執行lr_think_time()函數,這樣會給伺服器產生更大的壓力。
Replay think time
腳本回放時,執行lr_think_time()函數,具體執行方式有一下3種:
1)按照錄製時獲取的think time值回放。
2)按照錄製時獲取值的整數倍數回放腳本。
3)制定一個最大和最小的比例,按照兩者之間的隨機值回放腳本。
Limit think time to 選項,用於限制think time的最大值,腳本回放過程中,如果發現有超過這個值的,用這個最大值替代。
3、Error Handling(錯誤處理)
選擇General:Miscellaneous
說明:設定遇到錯誤時的處理方式
Continue on error:遇到錯誤時繼續運行。
Fail open transactions on lr_error_message:執行到事務中調用的lr_error_message()函數時將事務的結果置為Failed。
Generate snapshot on error:對錯誤進行快照
4.Multithreading(運行方式)
選擇 General:Miscellaneous
說明:設定腳本是以多線程方式運行還是以多進程方式運行。
Run Vuser as a process:以多進程方式運行。
Run Vuser as a thread:以多線程方式運行。
這個根據實際情況而定,通常B/S通常用線程,C/S用進程。
創建Vuser腳本—試運行腳本
1.腳本錄製完畢後,按F5鍵,或點擊菜單中的按鈕,可以試運行腳本。回放過程中VuGen在下方同步列印日誌。
2.如果需要查看不同的日誌形式,可以在腳本頁面菜單的vuseràruntime-settingsàlog選擇不同的項,回放腳本時將列印不同級別的日誌。
3.運行結束後,系統會給出相應的運行結果,可以通過ViewàTest Results查看回放結果
在VuGen中試運行腳本的作用,主要是查看錄製的腳本能否正常通過,如果有問題,系統會給出提示信息,並定位到出錯的行上,便於用戶查找到錯誤,修改完善測試腳本。
定義場景
腳本準備完成後,可以根據場景用例設置場景。Controller控制器提供了手動和面向目標兩種測試場景。
l 手動設計場景(Manual Scenario)最大的優點是能夠更靈活地按照需求來設計場景模型,使場景能更好地接近用戶的真實使用。一般情況下使用手動場景設計方法來設計場景。
l 面向目標場景(Goal Oriented Scenario)則是測試性能是否能達到預期的目標,在能力規劃和能力驗證的測試過程中經常使用。
Controller控制器可以從程序中打開,然後選擇保存好的腳本;也可以從VuGen中直接連接到該腳本的控制場景。
實例從VuGen中啟動Controller的步驟如下:
1、單擊VuGen菜單欄的toolsàcreate controller scenario。
2、在彈出窗口選擇虛擬用戶數、運行結果保存目錄(按照事先約定選擇目錄,結果文件的命名最好包含用戶數/加壓方式/場景名)、負載產生的負載機所在地。
3、在Create Scenario窗口中點擊OK,鏈接啟動LoadRunner Controller。
定義場景—設置Schedule
在Controller的Scenario Schedule中,可以設置場景的各項計劃,如虛擬用戶的載入方式、釋放策略等。
1.設置場景的基本信息
Schedule Name:設置場景名稱。
Schedule by:選擇按場景計劃或按用戶組計劃。
Run Mode:
real-world schedule 是真實場景模式,可以通過增加Action來增加多個用戶。
basic schedule 是我們以前用的『經典模式』,只能設置一次負載的上升和下降。
2.設置場景的各類參數:雙擊Global Schedule中的對應行,可以設置schedule的各類參數。
Initialize:初始化是指運行腳本中的Vuser_init操作,為測試準備Vuser和Load Generator。
Start Vusers:設置場景Vuser載入方式。
Duration:設置場景持續運行的情況。
Stop Vusers:設置場景執行完成後虛擬用戶釋放的策略。
Start Time:設置場景啟動時間。
場景設計完成後,單擊Controller界面下方的Run選項卡,可以進入場景的執行界面。這個界面用於控制場景的執行,包括啟動停止執行場景,觀察執行時是否出錯及出錯信息、執行時用戶情況、相關性能數據。
單擊Start Scenario按鈕,場景開始運行。一些即時的數據(比如用戶數,等待數,成功事務數,失敗事務數等)以及性能數據的折線圖,會在Run的過程中顯示。
執行完成後,執行結果以事先的命名默認保存在建立場景時設置的保存目錄。如果涉及到調優,需要多次執行同一個場景,建議每次運行前先調整菜單的ResultsàResults Settings,場景結果保存的名字建議包含重要調優參數值。調優參數比較多樣,可以在具體的項目用附件約定。
測試期間,可以使用LoadRunner的聯機監控器觀察Web伺服器在負載下的運行情況。特別是可以看到,負載的增加如何影響伺服器對用戶操作的響應時間(事務響應時間),以及如何引起錯誤的產生。
分析結果
LR的Analysis模塊是分析系統的性能指標的一個主要工具,它能夠直接打開場景的執行結果文件,將場景數據信息生成相關的圖表進行顯示。Analysis集成了強大的數據統計分析功能,允許測試員對圖表進行比較和合併等多種操作,分析後的圖表能夠自動生成需要的測試報告文檔。
通常測試報告需要給出「虛擬用戶—用戶響應時間」的折線圖,這個折線圖可以通過合併報表的形式生成,過程如下:選中Average Transaction Response Time報表,單擊菜單欄的ViewàMerge Graphsà然後選擇與Running Vuser圖合併,生成的折線圖即為「虛擬用戶—用戶響應時間」。
LoadRunner作為商業性能測試工具擁有強大的功能,License的價格也很高。還有一個Apache開發的開源免費性能測試工具Jmeter,互聯網公司使用比較多。這些工具只適合應用後端的壓力測試,使用時都是需要先安裝才能使用,如果想模擬大並發,前期還需要準備大量的工作壓力機,測試所佔用的資源成本比較高,壓測周期很長,越來越不適合移動應用產品敏捷開發、快速交付的需求。於是,雲智慧開發了基於雲的全鏈路性能測試產品——「壓測寶」,只需要三步就可以實現壓力測試,而且測試之前不需要用戶準備任何額外的硬體、帶寬資源。
壓測寶三步壓測
壓測寶界面
壓測寶的壓測點設置
壓測報告
最重要的是壓測寶使用的是雲主機,可以靈活模擬全國各地(北京、上海、廣州等),甚至海外的訪問壓力,外網請求也更接近線上真實場景情況,只要系統能上網就可以執行測試,測試結果保存在雲上,避免因環境問題導致測試結果數據丟失等問題。
此外,壓測寶提供豐富的擴展介面,能夠與企業現有測試工具Jenkins等緊密集成,將壓測任務以服務的方式進行驅動執行,實現面向產品全生命周期的持續交付和持續集成。而雲智慧擁有的性能測試專家團隊,依託壓測與性能管理平台為用戶提供專業的諮詢服務,並出具公立的第三方壓測報告,確保應用的上線質量。
推薦閱讀:
※饑荒遊戲掃雷筆記(五) | 性能分析篇——原來問題不止那麼多
※Jmeter使用過程中的坑之版本配置元件混用導致的壓測TPS周期性波動問題
※魯德——Android之編寫測試用例
※【泡芙車評】一起踩電門,帝豪EV性能測試報告
※性能測試原理分析及實戰
TAG:LoadRunner | 性能测试 |