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的機制和原理