loadrunner

loadrunner

LoadRunner,是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施並發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。企業使用LoadRunner能最大限度地縮短測試時間,最佳化性能和加速套用系統的發布周期。 LoadRunner可適用於各種體系架構的自動負載測試,能預測系統行為並評估系統性能。

基本信息

產生背景

企業的網路套用環境都必須支持大量用戶,網路體系架構中含各類套用環境且由不同供應商提供軟體和硬體產品。難以預知的用戶負載和愈來愈複雜的套用環境使公司時時擔心會發生用戶回響速度過慢, 系統崩潰等問題。這些都不可避免地導致公司收益的損失。Mercury Interactive 的 LoadRunner 能讓企業保護自己的收入來源, 無需購置額外硬體而最大限度地利用現有的IT 資源, 並確保終端用戶在套用系統的各個環節中對其測試套用的質量, 可靠性和可擴展性都有良好的評價。LoadRunner 的測試對象是整個企業的系統, 通過模擬實際用戶的操作行為和實行實時性能監測, 來幫助企業客戶更快的查找和發現問題。LoadRunner 能支持廣泛的協定和技術。

對象

LoadRunner的測試對象是整個企業的系統,它通過模擬實際用戶的操作行為和實行實時性能監測,查找和發現問題。此外,LoadRunner能支持廣泛的協定和技術。

主要功能

虛擬用戶

LoadRunner性能虛擬用戶模擬測試 LoadRunner性能虛擬用戶模擬測試

使用LoadRunner的Virtual User Generator,您能很簡便地創立起系統負載。該引擎能夠生成虛擬用戶,以虛擬用戶的方式模擬真實用戶的業務操作行為。它先記錄下業務流程(如下訂單或機票預定),然後將其轉化為測試腳本。利用虛擬用戶,您可以在Windows ,UNIX 或Linux 機器上同時產生成千上萬個用戶訪問。所以LoadRunner能極大的減少負載測試所需的硬體和人力資源。

用Virtual User Generator 建立測試腳本後,您可以對其進行參數化操作,這一操作能讓您利用幾套不同的實際發生數據來測試您的應用程式,從而反映出本系統的負載能力。以一個訂單輸入過程為例,參數化操作可將記錄中的固定數據,如訂單號和客戶名稱,由可變值來代替。在這些變數內隨意輸入可能的訂單號和客戶名,來匹配多個實際用戶的操作行為。

真實負載

Virtual users 建立起後,您需要設定您的負載方案,業務流程組合和虛擬用戶數量。用LoadRunner的Controller,您能很快組織起多用戶的測試方案。Controller 的Rendezvous 功能提供一個互動的環境,在其中您既能建立起持續且循環的負載,又能管理和驅動負載測試方案。

而且,您可以利用它的日程計畫服務來定義用戶在什麼時候訪問系統以產生負載。這樣,您就能將測試過程自動化。同樣您還可以用Controller 來限定您的負載方案,在這個方案中所有的用戶同時執行一個動作---如登入到一個庫存應用程式----來模擬峰值負載的情況。另外,您還能監測系統架構中各個組件的性能---- 包括伺服器,資料庫,網路設備等----來幫助客戶決定系統的配置。

定位性能

LoadRunner內含集成的實時監測器,在負載測試過程的任何時候,您都可以觀察到套用系統的運行性能。這些性能監測器為您實時顯示交易性能數據(如回響時間)和其它系統組件包括application server,web server,網路設備和資料庫等的實時性能。這樣,您就可以在測試過程中從客戶和伺服器的雙方面評估這些系統組件的運行性能,從而更快地發現問題。

利用LoadRunner的ContentCheck TM ,您可以判斷負載下的應用程式功能正常與否。ContentCheck 在Virtual users 運行時,檢測應用程式的網路數據包內容,從中確定是否有錯誤內容傳送出去。它的實時瀏覽器幫助您從終端用戶角度觀察程式性能狀況。

分析結果

一旦測試完畢後,LoadRunner收集匯總所有的測試數據,並提供高級的分析和報告工具,以便迅速查找到性能問題並追溯原由。使用LoadRunner的Web 交易細節監測器,您可以了解到將所有的圖象、框架和文本下載到每一網頁上所需的時間。例如,這個交易細節分析機制能夠分析是否因為一個大尺寸的圖形檔案或是第三方的數據組件造成套用系統運行速度減慢。另外,Web 交易細節監測器分解用於客戶端、網路和伺服器上端到端的反應時間,便於確認問題,定位查找真正出錯的組件。例如,您可以將網路延時進行分解,以判斷DNS 解析時間,連線伺服器或SSL 認證所花費的時間。通過使用LoadRunner的分析工具,您能很快地查找到出錯的位置和原因並作出相應的調整。

重複測試

負載測試是一個重複過程。每次處理完一個出錯情況,您都需要對您的應用程式在相同的方案下,再進行一次負載測試。以此檢驗您所做的修正是否改善了運行性能。

LoadRunner完全支持EJB 的負載測試。這些基於Java 的組件運行在套用伺服器上,提供廣泛的套用服務。通過測試這些組件,您可以在應用程式開發的早期就確認並解決可能產生的問題。

利用LoadRunner,您可以很方便地了解系統的性能。它的Controller 允許您重複執行與出錯修改前相同的測試方案。它的基於HTML 的報告為您提供一個比較性能結果所需的基準,以此衡量在一段時間內,有多大程度的改進並確保套用成功。由於這些報告是基於HTML 的文本,您可以將其公布於您公司的內部網上,便於隨時查閱。

接下來的文章編者就將輯錄一篇網上的使用LoadRunner®來測試BEA中間件產品文章來與大家分享如何使用LoadRunner進行實際的性能測試。

性能測試

虛擬用戶

LoadRunner使用虛擬用戶(Virtual users)來模擬實際用戶對業務系統施加壓力。虛擬用戶在一個中央控制器(controller station)的監視下工作。

在做一個測試方案時,要做的第一件事就是創建虛擬用戶執行腳本。LoadRunner提供了Virtual User Generator來錄製或編輯虛擬用戶腳本。

使用Vugen創建虛擬用戶執行腳本

A.從選單中選擇運行Virtual User Generator:

B.創建一個單協定腳本,選擇協定類型為"Tuxedo 7"

C.在彈出的視窗中輸入Tuxedo客戶機程式的執行檔名(SimpApp.exe),並選擇"Record into Action"為Action。

點擊"OK"開始錄製腳本,這時Vugen就會啟動Simpapp.exe,如下圖所示,輸入WSNADDR,輸入字元串(Tuxedo is powerful!)之後,點擊TOUPPER,TUXEDO伺服器完成請求後把輸出字元串(TUXEDO IS POWERFUL!)寫到"Output string"中,點擊停止錄製按鈕。

D.編輯Vuser腳本。在C中做的所有操作都被錄了下來,記錄到一個腳本檔案中,其內容如下,把它存為simpapp。

腳本內容如下:

#include "lrt.h"

#include "replay.vdf"

Actions()

{

lrt_tuxputenv("WSNADDR=//172.22.32.25:7110");

lr_think_time⑶;

tpresult_int = lrt_tpinitialize(LRT_END_OF_PARMS);

lrt_abort_on_error();

data_0 = lrt_tpalloc("STRING","",1);

lrt_strcpy(data_0,sbuf_1);

data_1 = lrt_tpalloc("STRING","",1);

tpresult_int = lrt_tpcall("TOUPPER",data_0,0,&data_1,&olen,0);

lrt_abort_on_error();

lrt_tpfree(data_0);

lrt_tpfree(data_1);

lrt_tpterm();

return 0;

}

代碼中加粗的函式是LoadRunner對TUXEDO函式的二次包裝。

E.點擊工具列中的"執行"按鈕來執行我們剛才錄製的腳本,確保執行無誤。

使用控制器來調度虛擬用戶

A.從選單中選擇運行Controller:

B.創建一個新的Scenario,選擇剛才錄製的腳本(simpapp):

點擊"OK",彈出Scenario調度界面。在"Quantity"中輸入100,表示使用100個虛擬用戶。(虛擬用戶與購買的LICENSE有關聯)

C.點擊"Edit Schedule"來編輯壓力調度。

D.選擇"Runtime settings"來作運行時設定。

在Pacing的設定中,"Number of Iterations"用於設定Vusers的Actions被執行的次數;"Start new iteration"用於設定調度器在什麼時機疊代執行Vusers的Actions。

"Think Time"用於設定Vusers的反應和思考時間,以儘量做到和正常人一樣來施壓。"Ignore think time"表示忽略思考時間,這是理想狀態,一般不使用。"As recorded"表示按照錄製時的實際操作時間。"Multiply recorded think time by"表示Vusers的思考時間是實際錄製時間的若干倍。

在"Miscellaneous"中設定一些雜項,如使用進程還是使用執行緒等。對於TUXEDO,好象只能選進程模式。

E.選擇"Start scenario"來開始本次壓力測試調度。

執行結果分析如下:

施壓時間為5分41秒,Vusers數量為100,一共完成的Actions交易數量為5625筆,平均回響時間為5.561秒,TPS為17.8。

測試組件

1. VuGen Load Generator 虛擬用戶生成器)用於捕獲最終用戶業務流程和創建自動性能測試腳本 (也稱為虛擬用戶腳本)。

2. Controller 控制器)用於組織、驅動、管理和監控負載測試。

3. Analysis 分析器)有助於您查看、分析和比較性能結果。

實例套用

隨機函式

軟體測試工具中如何巧用LoadRunner的隨機函式

LoadRunner有自帶的隨機函式,如果巧妙的加以採用,能解決一些看似很困難的實際問題。

一個項目的性能測試。與資料庫直連,根據外部傳入的SQL ID和SQL參數,從指定資料庫中讀取SQL模版,拼裝成真實的SQL語句、執行,並將得到的結果放入快取中。目的是減少資料庫的壓力。

該系統將支撐大量的SQL操作,性能自然成為備受關注的焦點之一。

由於它跟SQL語句相關,在真實環境下,同一時間可能執行著不同類型的SQL,即便是同一類型,其參數也各式各樣。那么,怎樣才能模擬出最符合實際情況的性能測試場景呢?

首先設計場景,即,在LoadRunner中按照比例隨機取到某一類型的SQL,再隨機傳入參數給它,讓最終的每條SQL都是隨機生成,各不相同。

從場景中,可以看到,此處涉及雙重隨機。只採用loadruner的參數設定是無法實現的。此時需要想辦法先按設定好的比例隨機取到SQL,然後在每條SQL上隨機取參數列表中的參數。

於是想到了loadrunner的隨機函式。先實現隨機取SQL ID,之後再在特定的SQL中隨機取參數列表中的參數。

LoadRunner中,隨機函式是rand(),它用來產生0到rand_max之間的隨機整數。函式原型是

int rand (void);

然而調用rand之前,必須給隨機數產生一個隨機種子。這個種子由srand()函式產生。其原型是

int srand (seedTime);

舉例

採用上述兩個函式,就能實現第一重隨機了。具體腳本代碼如下:

通過上面的腳本,實現了性能測試設計的場景。調試通過後,放入Controller中執行。實際執行過程中,Vuser將會按比例隨機取到不同類型的SQL,並隨機取到SQL中的參數,執行特定的SQL語句。註:sqlid_name是SQL ID名稱;random_para是通過file方式實現的隨機參數;tn是web_url函式的快照名稱。

巧用LoadRunner的隨機函式,能解決不少實際問題。

分析占用率

LoadRunner分析頁面 LoadRunner分析頁面

1. 平均事務回響時間

Average Transaction Response Time 優秀:<2s

良好:2-5s

及格:6-10s

不及格:>10s

2. 每秒點擊率

Hits per Second

當增大系統的壓力(或增加並發用戶數)時,吞吐率和TPS的變化曲線呈大體一致,則系統基本穩定。若壓力增大時,吞吐率的曲線增加到一定程度後出現變化緩慢,甚至平坦,很可能是網路出現頻寬瓶頸,同理若點擊率/TPS曲線出現變化緩慢或者平坦,很可能是伺服器回響時間增加,觀察伺服器資源使用情況,確定是否是伺服器問題。

3. 請求回響時間

Time to Last Byte

4. 每秒系統處理事務數

Transaction per second

5. 吞吐量

Throughout

6. CPU利用率

Processor / %Processor Time 好:70%

壞:85%

很差:90%+

7. 資料庫操作消耗的CPU時間

Processor / %User Time 如果該值較大,可以考慮是否能通過友好算法等方法降低這個值。如果該伺服器是資料庫伺服器, Processor\%User Time 值大的原因很可能是資料庫的排序或是函式操作消耗了過多的CPU時間,此時可以考慮對資料庫系統進行最佳化。

8. 核心態CPU平均利用率

Processor /%Privileged Time 如果該參數值和"Physical Disk"參數值一直很高,表明I/O有問題。可考慮更換更快的硬碟系統

9. 處理佇列中的執行緒數

Processor / Processor Queue Length 如果該值保持不變(>=2)個並且%Processor Time 超過90%,那么可能存在處理器瓶頸。如果發現超過2,而處理器的利用率卻一直很低,那么或許更應該去解決處理器阻塞問題,這裡處理器一般不是瓶頸。

10. 檔案系統快取

Memory / Cache Bytes 50%的可用物理記憶體

11. 剩餘的可用記憶體

Memory / Avaiable Mbytes 至少要有10% 的物理記憶體值

12. 每秒下載頁數

Memory / pages/sec 好:無頁交換

壞:CPU每秒10個頁交換

很差:更多的頁交換

13. 頁面讀取操作速率

Memory / page read/sec 如果頁面讀取操作速率很低,同時 % Disk Time 和 Avg.Disk Queue Length的值很高,則可能有磁碟瓶徑。但是,如果佇列長度增加的同時頁面讀取速率並未降低,則記憶體不足。

14. 物理磁碟利用率

Physical Disk / %Disk Time 好:<30%

壞:<40%

很差:<50%+

15. 物理磁碟平均磁碟I/O佇列長度

Physical Disk / Avg.Disk Queue Length 該值應不超過磁碟數的1.5~2 倍。要提高性能,可增加磁碟

16. 網路吞吐量

Network Interface / Bytes Total/sec 判斷網路連線速度是否是瓶頸,可以用該計數器的值和當前網路的頻寬,結果應該小於50%

17. 數據高速快取區命中率 命中率應大於0.90最好

18. 共享區庫快取區命中率 命中率應大於0.99

19. 監控 SGA 中字典緩衝區的命中率 命中率應大於0.85

20. 檢測回滾段的爭用 小於1%

21. 監控 SGA 中重做日誌快取區的命中率

應該小於1%

22. 監控記憶體和硬碟的排序比率 最好使它小於 10% 安裝

版本要求

LoadRunner 分為Windows 版本和Unix 版本。如果所有測試環境基於Windows平台,那么只要安裝Windows 版本即可。

LoadRunner的Unix版本僅提供Load Generator組件的安裝(即LoadRunner中的負載生成器)。也就是說,這個負載生成器可以在Unix環境下安裝和運行,並提供給Controller進行遠程管理。但是,腳本的錄製和場景的設計必須在Windows平台完成。

系統要求

運行LoadRunner,記憶體最好在128M 以上,LoadRunner7.8 的最低要求。記憶體最好在512M 以上,安裝LoadRunner 的磁碟空間至少剩餘500M。作業系統最好為Windows 2000。

參數對照

LR函式:

lr_start_transaction 為性能分析標記事務的開始

lr_end_transaction 為性能分析標記事務的結束

lr_rendezvous 在 Vuser 腳本中設定集合點

lr_think_time 暫停 Vuser 腳本中命令之間的執行

lr_end_sub_transaction 標記子事務的結束以便進行性能分析

lr_end_transaction 標記 LoadRunner 事務的結束

Lr_end_transaction("trans1",Lr_auto);

lr_end_transaction_instance 標記事務實例的結束以便進行性能分析

lr_fail_trans_with_error 將打開事務的狀態設定為 LR_FAIL 並傳送錯誤訊息

lr_get_trans_instance_duration 獲取事務實例的持續時間(由它的句柄指定)

lr_get_trans_instance_wasted_time 獲取事務實例浪費的時間(由它的句柄指定)

lr_get_transaction_duration 獲取事務的持續時間(按事務的名稱)

lr_get_transaction_think_time 獲取事務的思考時間(按事務的名稱)

lr_get_transaction_wasted_time 獲取事務浪費的時間(按事務的名稱)

lr_resume_transaction 繼續收集事務數據以便進行性能分析

lr_resume_transaction_instance 繼續收集事務實例數據以便進行性能分析

lr_set_transaction_instance_status 設定事務實例的狀態

lr_set_transaction_status 設定打開事務的狀態

lr_set_transaction_status_by_name 設定事務的狀態

lr_start_sub_transaction 標記子事務的開始

lr_start_transaction 標記事務的開始

Lr_start_transaction("trans1");

lr_start_transaction_instance 啟動嵌套事務(由它的父事務的句柄指定)

lr_stop_transaction 停止事務數據的收集

lr_stop_transaction_instance 停止事務(由它的句柄指定)數據的收集

lr_wasted_time 消除所有打開事務浪費的時間

lr_get_attrib_double 檢索腳本命令行中使用的 double 類型變數

lr_get_attrib_long 檢索腳本命令行中使用的 long 類型變數

lr_get_attrib_string 檢索腳本命令行中使用的字元串

lr_user_data_point 記錄用戶定義的數據示例

腳本

lr_whoami 將有關 Vuser 腳本的信息返回給 Vuser 腳本

lr_get_host_name 返回執行 Vuser 腳本的主機名

lr_get_master_host_name 返回運行 LoadRunner Controller 的計算機名

lr_eval_string 用參數的當前值替換參數

lr_save_string 將以 NULL 結尾的字元串保存到參數中

lr_save_var 將變長字元串保存到參數中

lr_save_datetime 將當前日期和時間保存到參數中

lr _advance_param 前進到下一個可用參數

lr _decrypt 解密已編碼的字元串

lr_eval_string_ext 檢索指向包含參數數據的緩衝區的指針

lr_eval_string_ext_free 釋放由 lr_eval_string_ext 分配的指針

lr_save_searched_string 在緩衝區中搜尋字元串實例,並相對於該字元串實例,將該緩衝區的一部分保存到參數中

lr_debug_message 將調試信息傳送到輸出視窗

lr_error_message 將錯誤訊息傳送到輸出視窗

lr_get_debug_message 檢索當前訊息類

lr_log_message 將訊息傳送到日誌檔案

lr_output_message 將訊息傳送到輸出視窗

lr_set_debug_message 設定調試訊息類

lr_vuser_status_message 生成帶格式的輸出,並將其寫到 ControllerVuser 狀態區域

lr_message 將訊息傳送到 Vuser 日誌和輸出視窗

lr_load_dll 載入外部 DLL

lr_peek_events 指明可以暫停 Vuser 腳本執行的位置

lr_think_time 暫停腳本的執行,以模擬思考時間(實際用戶在操作之間暫停以進行思考的時間)

lr_continue_on_error 指定處理錯誤的方法

lr_continue_on_error (0);lr_continue_on_error ⑴;

lr_rendezvous 在 Vuser 腳本中設定集合點

TE_wait_cursor 等待游標出現在終端視窗的指定位置

TE_wait_silent 等待客戶端應用程式在指定秒數內處於靜默狀態

TE_wait_sync 等待系統從 X-SYSTEM 或輸入禁止模式返回

TE_wait_text 等待字元串出現在指定位置

TE_wait_sync_transaction 記錄系統在最近的 X SYSTEM 模式下保持的時間

WEB函式列表:

web_custom_request 允許您使用 HTTP 支持的任何方法來創建自定義 HTTP 請求

web_image 在定義的圖像上模擬滑鼠單擊

web_link 在定義的文本連結上模擬滑鼠單擊

web_submit_data 執行“無條件”或“無上下文”的表單

web_submit_form 模擬表單的提交

web_url 載入由“URL”屬性指定的 URL

web_set_certificate 使 Vuser 使用在 Internet Explorer 註冊表中列出的特定證書

web_set_certificate_ex 指定證書和密鑰檔案的位置和格式信息

web_set_user 指定 Web 伺服器的登錄字元串和密碼,用於 Web 伺服器上已驗證用戶身份的區域

web_cache_cleanup 清除快取模擬程式的內容

web_find 在 HTML 頁內搜尋指定的文本字元串

web_global_verification 在所有後面的 HTTP 請求中搜尋文本字元串

web_image_check 驗證指定的圖像是否存在於 HTML頁內

web_reg_find 在後面的 HTTP 請求中註冊對 HTML源或原始緩衝區中文本字元串的搜尋

web_disable_keep_alive 禁用 Keep-Alive HTTP 連線

web_enable_keep_alive 啟用 Keep-Alive HTTP 連線

web_set_connections_limit 設定 Vuser 在運行腳本時可以同時打開連線的最大數目

web_concurrent_end 標記並發組的結束

web_concurrent_start 標記並發組的開始

web_add_cookie 添加新的 Cookie 或修改現有的 Cookie

web_cleanup_cookies 刪除當前由 Vuser 存儲的所有 Cookie

web_remove_cookie 刪除指定的 Cookie

web_create_html_param 將 HTML 頁上的動態信息保存到參數中。(LR 6.5 及更低版本)

web_create_html_param_ex 基於包含在 HTML 頁內的動態信息創建參數(使用嵌入邊界)(LR 6.5 及更低版本)。

web_reg_save_param 基於包含在 HTML 頁內的動態信息創建參數(不使用嵌入邊界)

web_set_max_html_param_len 設定已檢索的動態 HTML 信息的最大長度

web_add_filter 設定在下載時包括或排除 URL 的條件

web_add_auto_filter 設定在下載時包括或排除 URL 的條件

web_remove_auto_filter 禁用對下載內容的篩選

web_add_auto_header 向所有後面的 HTTP 請求中添加自定義標頭

web_add_header 向下一個 HTTP 請求中添加自定義標頭

web_cleanup_auto_headers 停止向後面的 HTTP 請求中添加自定義標頭

web_remove_auto_header 停止向後面的 HTTP 請求中添加特定的標頭

web_revert_auto_header 停止向後面的 HTTP 請求中添加特定的標頭,但是生成隱性標頭

web_save_header 將請求和回響標頭保存到變數中

web_set_proxy 指定將所有後面的 HTTP 請求定向到指定的代理伺服器

web_set_proxy_bypass 指定 Vuser 直接訪問(即不通過指定的代理伺服器訪問)的伺服器列表

web_set_proxy_bypass_local 指定 Vuser 對於本地 (Intranet) 地址是否應該避開代理伺服器

web_set_secure_proxy 指定將所有後面的 HTTP 請求定向到伺服器

web_set_max_retries 設定操作步驟的最大重試次數

web_set_timeout 指定 Vuser 等待執行指定任務的最長時間

web_convert_param 將 HTML 參數轉換成 URL 或純文本

web_get_int_property 返回有關上一個 HTTP 請求的特定信息

web_report_data_point 指定數據點並將其添加到測試結果中

web_set_option 在非 HTML 資源的編碼、重定向和下載區域中設定 Web 選項

web_set_sockets_option 設定套接字的選項

相關詞條

相關搜尋

熱門詞條

聯絡我們