LoadRunner腳本語言基礎
在用LoadRunner做性能測試的過程中規(guī),編寫腳本是一項非常重要的工作,一個腳本的好壞關系到性能測試的成敗
vuser_init:是虛擬用戶初始化函數(shù),一般將用戶初始化的操作放在這里,如登錄操作、分配內存等,而且在做vuser_init的時候,Controllerller的Vuser狀態(tài)區(qū)域會顯示Intialize狀態(tài)
Action:是虛擬用戶要做的業(yè)務。用戶的業(yè)務操作,也就是測試內容的主體。在VU里設置迭代循環(huán)選項時,只有Action會生效,被重復運行,而init和end部分,則在腳本的運行過程中,只會運行一次。
vuser_end:與vuser_init相對應,vuser_end做收尾工作。
如果在vuser_init中是登錄,vuser_end里就要做退出登錄
如果在vuser_init中是申請內存(使用malloc函數(shù)),vuser_end中就應該是釋放內存(使用free函數(shù))

在LoadRunner的腳本中,可以調用三種函數(shù)
(1)VU通用函數(shù),一般以lr開頭,如lr_start_transaction函數(shù)
(2)協(xié)議相關函數(shù),不同類型的Vuser的函數(shù)一般以本協(xié)議類型開頭,如web_url就是一個協(xié)議函數(shù),web前綴說明它是屬于Web HTTP協(xié)議的,HTTP協(xié)議函數(shù)還包括web_list、web_link
(3)語言相關函數(shù),VU腳本是用C語言寫的,那么C語言的標準函數(shù)或dll都可以在這里被加載和使用

通用VU函數(shù)是構建在C語言基礎之上的腳本框架函數(shù),起支持作用,因此學習通過VU函數(shù),有助于我們了解LoadRunner腳本機制
通用VU函數(shù)有一個特征,就是以LR開頭,以標明它們屬于LR,而不專屬于任何協(xié)議,只要是C腳本,就都可以使用
通用VU函數(shù)可以分為事務控制函數(shù)、命令行分析函數(shù)、系統(tǒng)信息函數(shù)、字符串函數(shù)、日志函數(shù)和運行時函數(shù)
事務和事務控制函數(shù)
軟件系統(tǒng)的性能就是靠一個個事務來度量的。LoadRunner中事務的定義就是靠事務函數(shù)來進行的,在執(zhí)行性能測試時,LoadRunner會采集完成其定義的每個事務所花費的時間,并在性能測試后在Analysis中進行統(tǒng)計分析

命令行分析函數(shù)
當LoadRunner用命令行方式啟動和運行時,以下函數(shù)用來分析命令行,以得到命令行中的參數(shù)信息
lr_get_attrib_double,檢索腳本命令行中使用的double類型變量
lr_get_attrib_long,檢索腳本命令行中使用的long類型變量
lr_get_attrib_string,檢索腳本命令行中使用的字符串
系統(tǒng)信息函數(shù)
用來得到VU的系統(tǒng)信息
lr_user_data_point,記錄用戶定義的數(shù)據采集點
lr_whoami,將有關Vuser的信息返回給Vuser腳本
lr_get_host_name,返回執(zhí)行Vuser腳本的主機名
lr_get_master_host_name,返回運行LoadRunner Controller的計算機名
字符串函數(shù)
主要對參數(shù)進行操作,包括對不同類型參數(shù)的讀取、存儲和移動
lr_eval_string,返回參數(shù)的當前值
lr_save_string,將以NULL結尾的字符串保存到參數(shù)中
lr_save_var,將變長字符串保存到參數(shù)中
lr_save_datetime,將當前日期和時間保存到參數(shù)中
lr_advance_param,前進到下一個可用參數(shù)
lr_decrypt,解密已解碼的字符串
lr_eval_string_ext,lr_eval_string的擴展,為指向包含參數(shù)數(shù)據的緩沖區(qū)的指針
lr_eval_string_ext_free,釋放由 lr_eval_string_ext 分配的指針
lr_save_searched_string,在緩沖區(qū)中搜索字符串實例,并將該字符串實例保存到參數(shù)中
消息函數(shù)
是VU發(fā)送和記錄log的函數(shù)
lr_debug_message,將調試消息發(fā)送到輸出窗口
lr_error_message,將錯誤消息發(fā)送到輸出窗口
lr_get_debug_message,得到當前的消息類
lr_log_message,將輸出消息直接發(fā)送到output.txt文件,此文件位于Vuser腳本目錄中
lr_output_message,將消息發(fā)送到輸出窗口
lr_set_debug_message,為輸出消息設置消息類
lr_vuser_status_message,生成格式化輸出并將其打印到Controller Vuser狀態(tài)區(qū)域
lr_message,將消息發(fā)送到Vuser日志和輸出窗口
運行時(run-time)函數(shù)
多數(shù)是通過VU的runtime來設置的,有以下函數(shù)放在腳本中來實現(xiàn),使LoadRunner的控制更加細致,對外更加靈敏
lr_load_dll,加載外部DLL
lr_think_time,暫停腳本的執(zhí)行,以模擬思考時間(實際用戶在操作之間暫停以進行思考的時間)
lr_continue_on_error,指定腳本如何處理錯誤場景,是繼續(xù)還是退出
lr_rendezvous,在Vuser腳本中設置集合點
協(xié)議相關函數(shù)
除了通用的Vuser函數(shù)外,Vugen還會在錄制時生成特定于協(xié)議的函數(shù),并將它們插入到Vuser腳本中
特定于協(xié)議的函數(shù)是專門針對要錄制的Vuser的類型而生成的。如:Vugen會將LRD函數(shù)插入到數(shù)據庫腳本中,將LRT函數(shù)插入到Tuxedo腳本中,將LRS函數(shù)插入到Windows套接字腳本中
在通用VU函數(shù)的基礎上,不同協(xié)議類型的Vuser有自己一套協(xié)議相關的函數(shù)。一般協(xié)議相關的函數(shù)以本協(xié)議名字開頭。如HTTP協(xié)議以web開頭,MMS協(xié)議以mms開頭,Database協(xié)議以lrd開頭。
HTTP協(xié)議原理
HTTP協(xié)議的Vuser是模擬瀏覽器和Web Server的交互過程
瀏覽器與Web Server的一個簡單的交互過程如圖

HTTP協(xié)議交互原理
當瀏覽器想要得到一個網頁時,用戶在瀏覽器的地址欄里輸入網頁的URL,然后回車,瀏覽器首先就會發(fā)送一個HTTP的命令到Server,Server就會把頁面的數(shù)據傳送給瀏覽器,瀏覽器把數(shù)據解析成我們看到的HTML頁面。但是HTTP協(xié)議有一個特點,它是無狀態(tài)的,也就是說,瀏覽器和Server的每個交互都是獨立無關的,Server不知道來自Browser的任何兩個請求是否出自同一頁面,或者是否有次序的規(guī)定。Web系統(tǒng)在HTTP協(xié)議上層進行了控制,通過Cookie、Session等機制來保證請求的狀態(tài)
HTTP在LoadRunner的實現(xiàn)
以上過程,完全可以由LoadRunner的HTTP Vuser的函數(shù)來實現(xiàn)。以下圖例是所有要用到的LoadRunner函數(shù)


LoadRunner HTTP函數(shù)
可見LoadRunner提供的HTTP協(xié)議API是比較細致的,不僅覆蓋了瀏覽器與Server的交互,而且還有設置

HTTP Vuser錄制生成的腳本
Web_add_cookie 的作用是保存 Server 傳過來的 cookie,以后的訪問都會基于此cookie,直到腳本的結束
Web_url 顯示用戶在IE地址欄中輸入www.test.com 然后回車,IE發(fā)起一個訪問的請求
用戶進入www.test.com頁面后,點擊一個alt屬性為library的圖片,此操作被LoadRunner記錄為Web_image函數(shù)
最后用戶做了一個搜索的操作,退出
如果想生成功能強大一些的腳本,就需要了解VU的機制和原理