1. 程式人生 > >LoadRunner常用函式

LoadRunner常用函式

LoadRunner中,常用的函式有很多,這裡只介紹編寫效能測試指令碼過程中那些必然用到的函式。本文重點關注這些典型函式的應用場合及注意點,至於函式詳細使用說明請參見LoadRunner幫助文件。

1.1.1.事務相關

1.1.1.1. lr_start_transaction/lr_end_transaction

功能:事務開始/結束標記。

應用場合:需要統計某一段程式碼塊執行所需要的時間,這兩個函式需要成對使用。

舉例:工作流系統性能測試中有一個需求,300人線上,提交工單操作平均響應時間在3秒以內,則需要在提交工單請求步驟之前插入lr_start_transaction,提交工單請求步驟之後插入lr_end_transaction。

注意點:這兩個函式只是標記函式,用於標記事務開始/結束,因此可以巢狀使用,即事務中還可以包含子事務。

1.1.1.2. lr_think_time

功能:模擬思考時間,即等待時間。

應用場合:線上使用者測試,為了讓每一個虛擬使用者模擬一個真實使用者的行為,即讓一個虛擬使用者對系統產生的壓力跟真實使用者相當,就必須使用這個函式。這是因為,使用者在使用系統的過程中,從一個操作轉換到另一個操作,是需要時間的,這個時間就是思考時間。

舉例:客服3.0工作流系統線上使用者測試。對於工單查詢操作,輸入查詢條件後提交查詢,從輸入查詢條件至提交查詢的時間間隔就是思考時間。因為LoadRunner無法模擬鍵盤輸入的過程,它只能模擬鍵盤輸入的等待時間,此時需要在提交查詢的那個動作前插入lr_think_time函式。

注意點:在錄製指令碼中,原子事務內不要包含lr_think_time函式,否則該思考時間將被統計到事務響應時間中,造成結果不準確。另外lr_think_time是否啟作用,可通過runtime-seting進行設定。

注:原子事務指那些不能再分割為更小事務的事務,它經常指一個單一的業務操作,通常表現為一個URL請求。

1.1.1.3. lr_rendezvous

功能:在Vuser指令碼中設定集合點。

應用場合:併發測試。

舉例:客服3.0培訓考試系統,100人同時開啟同一份試卷。則需要在開啟試卷的語句前插入lr_rendezvous函式,並在場景中設定集合點策略。

注意點:非併發測試,例如在測試系統的處理能力時,最好不要設定集合點,因為一旦設定了集合點,將導致一些VUser處於等待狀態,在這等待過程中伺服器將是空閒的,這將導致不能準確的測試出伺服器的真實效能水平。集合點更多用於發現系統的併發問題。

1.1.2.引數化/關聯

1.1.2.1.lr_save_string/lr_save_int

功能:將某一字串/整型儲存為引數。

應用場合:有些變數的值通過C語言生成,之後在測試指令碼中要使用這些變數。

舉例:客服3.0業務配置臺系統增加業務代表操作,業務代表的工號和姓名使用C語言函式生成。工號和姓名分別儲存在staff_no和staff_name變數中,則在指令碼中可以使用lr_save_int(staff_no,"staffno"),lr_save_string(staff_name, "stafffname")將工號和姓名引數化。

注意點:無。

1.1.2.2.web_reg_save_param

功能:在伺服器返回的文字中查詢一個或者多個字串,並將搜尋到的字串值儲存在引數中。

應用場合:在B/S或者C/S系統中,伺服器返回給客戶端的資料有些是動態改變的,在指令碼的下一個步驟中,需要使用該動態資料。這時,就需要使用關聯獲得該動態資料。

舉例:客服3.0工作流系統,工單辦理每次都從待辦區中開啟第一條工單,為開啟第一條工單,需要獲取第一條工單的完整URL(包括URL中的parameter及其值),而每一次進入待辦區,第一條工單有可能是不一樣的。為獲取第一條工單的URL,將開啟工單的URL做關聯。已知開啟待辦區操作獲得的HTML有如下片斷:

<a href="#"onclick="javascript:openseviceforprocess('/iwflow/FindJspID.jsp?serialNo=2008092200000033&serviceID=0099&nodeID=140004&dealID=2008092200000056&hisFlag=0&skillID=020401&dealSkillID=020101&dealStaff=1200','false');">

可在開啟待辦區的操作前插入如下語句:

web_reg_save_param("tt_url", "LB=javascript:openseviceforprocess('","RB=','false')", "Ord=1","IgnoreRedirections=Yes", "Search=Body","RelFrameId=1", LAST );

執行指令碼後,tt_url的值為:

/iwflow/FindJspID.jsp?serialNo=2008092200000033&serviceID=0099&nodeID=140004&dealID=2008092200000056&hisFlag=0&skillID=020401&dealSkillID=020101&dealStaff=1200

這個URL就是開啟第一條工單的URL,有了URL,便可開啟工單。

注意點:

(1)LoadRunner工具只能識別文字,在HTTP協議中只能識別HTML文件,因此關聯的依據是HTML原始碼,而不是經過瀏覽器解析後的視覺化文字。這一點很重要。

(2)關聯還能將多個匹配的引數儲存在陣列中,方法是指定ORD的屬性值為ALL,之後通過“{引數名_1}”, “{引數名_2}”, “{引數名_3}”格式可獲得陣列元素的值。

(3)該函式有一個屬性NOTFOUND,預設值為ERROR,也就是說,如果找不到要查詢的資料,將報出錯誤,在必要的時候,例如指令碼邏輯控制需要,可以將NOTFOUND的屬性值設為WARNING,這樣LoadRunner將不產生錯誤。

1.1.2.3.lr_save_searched_string

功能:在某一個字元緩衝區中搜索指定的字串,並將搜到的字串儲存在引數中。

應用場合:可配合LoadRunner的關聯功能,靈活獲取伺服器端返回的資料。

舉例:客服3.0工作流系統,工單處理每次都從待辦區中開啟第一條工單,開啟工單的URL已經通過關聯儲存在tt_url引數中,在工單處理提交時,需要使用serviceNo,serviceID,nodeID,dealID,tt_url的值如下:

/iwflow/FindJspID.jsp?serialNo=2008092200000033&serviceID=0099&nodeID=140004&dealID=2008092200000056&hisFlag=0&skillID=020401&dealSkillID=020101&dealStaff=1200

可使用以下函式儲存serviceNo,serviceID,nodeID,dealID的值。

//儲存serialNo,serviceID,nodeID,dealID引數

int getTTData(){

 int i = 0;int j=0;

char *tt_url = lr_eval_string("{tt_url}");

 int len= strlen(tt_url);

 while(tt_url[i]!='='){i++;} while(tt_url[j]!='&'){j++;}

 lr_save_searched_string(tt_url,len,0,"serialNo",1,j-i-1,"serialNo");

 i++;j++;while(tt_url[i]!='='){i++;} while(tt_url[j]!='&'){j++;}

lr_save_searched_string(tt_url,len,0,"serviceID",1,j-i-1,"serviceID");

  i++;j++;while(tt_url[i]!='='){i++;}  while(tt_url[j]!='&'){j++;}

 lr_save_searched_string(tt_url,len,0,"nodeID",1,j-i-1,"nodeID");

  i++;j++; while(tt_url[i]!='='){i++;}  while(tt_url[j]!='&'){j++;}

lr_save_searched_string(tt_url,len,0,"dealID",1,j-i-1,"dealID");

return 0;

}

注意點:

1.1.2.4.lr_save_datetime

功能:將時間儲存為引數。

應用場合:應用系統需要把時間資料提交給伺服器端。

舉例:客服3.0工作流系統活動工單查詢,預設查詢從當天開始的最近三天工單。 則查詢的開始時間和結束時間可用lr_save_datetime獲取。

lr_save_datetime("%y-%m-%d00:00", DATE_NOW-2*ONE_DAY, "queryBeginTime");    

lr_save_datetime("%y-%m-%d23:59", DATE_NOW, "queryEndTime");

注意點:

1.1.2.5. web_save_timestamp_param

功能:將當前時間戳儲存為引數。

應用場合:應用系統需要把時間戳提交給伺服器端。

舉例:多媒體坐席客戶端,在向MClient提交資訊時,需要附帶客戶端的時間戳,則可以使用該函式獲取當前時間戳。

注意點:與lr_save_datetime不同的是,本函式儲存的是時間戳,而lr_save_datetime儲存的是日期和時間。

1.1.2.6.lr_eval_string

功能:將某一字串中包含的所有引數替換為真實值,並返回替換後的字串。

應用場合:欲檢視某一引數的值,可使用該函式。

舉例:客服3.0工作流系統,生成工單時開啟工單頁面準備工單提交,提交之前想檢視已通過關聯儲存的serialNo引數的值。方法如下:

lr_output_message(lr_eval_string("TheserialNo is {serialNo}"));

注意點:如果不存在該引數,將把“{引數名}”當作普通字串輸出。如本例,如果不存在serialNo引數,則輸出:The serialNo is {serialNo}。

1.1.3.驗證點

1.1.3.1.web_reg_find

功能:在HTML文件中查詢指定的字串。

應用場合:該函式是檢查點函式,在指令碼中需要插入檢查點的地方使用。

舉例:客服3.0工作流系統,提交工單生成後,需要驗證工單是否提交成功。則可根據頁面提示“工單生成成功”進行驗證。在提交生成工單步驟前插入:

web_reg_find("Text=工單生成成功",LAST);

注意點:該函式是註冊型引數,需要在請求伺服器資料步驟之前插入該函式。與該函式功能類似的函式是web_find,但是web_find只對HTML方式的指令碼起作用,對URL方式指令碼則不起作用,而且web_find函式效率低下,已被廢棄。

1.1.3.2. web_image_check

功能:判斷某一個圖片是否存在HTML頁面中。

應用場合:同web_reg_find函式一樣,該函式也是檢查點函式,在指令碼中需要插入檢查點的地方使用。

舉例:客服3.0培訓考試系統併發測試,50個人同時開啟試卷,為了驗證開啟試卷成功,根據試卷中的圖片public/images/onexam.gif進行驗證:

web_image_check("web_image_check","Src=public/images/onexam.gif",LAST);

注意點:要使該函式生效,需要在runtime-seting中將開啟。與web_reg_find不一樣的是,該函式不是註冊型函式,因此需要在請求返回步驟之後插入該函式。上文提過,LoadRunner只能識別文字,因此web_image_check函式其本質仍然是文字驗證,完全可以用web_reg_find替代,而且強烈推薦使用web_reg_find作為檢查點函式。

1.1.4.日誌輸出

1.1.4.1. lr_output_message

功能:將VUser的訊息列印到日誌檔案和輸出視窗中,列印的訊息帶有指令碼行資訊。

應用場合:方便檢視執行資訊,輔助問題定位。

舉例:客服3.0系統,登入工號已經引數化,除錯指令碼時將當前的登入工號輸出到Replay Log視窗中。程式碼如下:

lr_output_message("Thestaffno is %s",lr_eval_string("{staffno}"));

注意點:與該函式具有類似功能的還有:lr_debug_message,lr_log_message lr_message,lr_error_message它們之間的不同之處這裡不作詳細介紹,請參見LoadRunner幫助文件。

1.1.4.2. lr_vuser_status_message

功能:將VUser的訊息輸出到場景執行的VUser狀態視窗。

應用場合:將一些關鍵資訊輸出到VUser執行狀態視窗,方便場景執行時檢視。

舉例:在場景執行過程中,出現了錯誤。根據錯誤視窗提示,該錯誤屬於VUser ID為2的虛擬使用者,為了方便將系統登入使用者名稱與VUser ID對應起來,以方便問題定位。可以使用以下程式碼:

lr_vuser_status_message("Thelogin username is %s", lr_eval_string("{username}"));

場景執行時,可方便檢視到VUserID與登入使用者名稱的對應關係,如下圖:

注意點:

1.1.5.其它實用函式

1.1.5.1. lr_get_vuser_ip

功能:獲得VUser的IP地址。

應用場合:在使用IP欺騙時,為了驗證IP欺騙是否成功,可以使用該函式。

舉例:在場景執行過程中,將每一個VUser的IP在VUser執行狀態視窗中顯示出來。

char *ip;

ip = lr_get_vuser_ip();

if (ip)

{

  lr_vuser_status_message("The IP addressis %s", ip);

}

注意點:為了使IP欺騙成功,使用IP欺騙嚮導設定好IP後,還要將開啟才可。

1.1.5.2. lr_load_dll

功能:載入外部DLL。

應用場合:指令碼需要使用外部DLL時,使用該函式載入DLL。

舉例:函式getDateTime(char * time,int seconds,char * resultTime)已封裝在timeutil.dll中,getDateTime的功能是根據傳入的日期字串time(如2008-09-24 16:56:24),秒偏移量seconds,計算返回結果日期字串resultTime,程式碼如下:

int hours =atoi(lr_eval_string("hours"));

char acceptEndTime[20];

lr_load_dll("../timeutil.dll");

getDateTime(lr_eval_string("{acceptBeginTime}"),3600*hours,acceptEndTime);

注意點:該函式為LoadRunner提供了呼叫外部介面的能力。

相關推薦

LoadRunner常用函式

LoadRunner中,常用的函式有很多,這裡只介紹編寫效能測試指令碼過程中那些必然用到的函式。本文重點關注這些典型函式的應用場合及注意點,至於函式詳細使用說明請參見LoadRunner幫助文件。 1.1.1.事務相關 1.1.1.1. lr_start_transacti

Loadrunner常用函式詳解(一)

web_url 語法: Int Web_url(const char *name, const char * url, , [EXTRARES,,LAST) 返回值 成功時返回LR_PASS (0),失敗時返回 LR_FAIL (1)。 引數: Name:VuGen中

Web常用函式介紹(LoadRunner相關)

介紹大綱:1. web_url2. web_image3. web_link4. web_submmit_form 詳細介紹: 一. web_url 語法:Int Web_url(const char *name, const char * url, , [EXTRARES,,LAST) 返回值成功時

Loadrunner C語言指令碼常用函式總結

1.替換字串中指定字元 1.1函式實現 /* ** sSrc待替換的原字串 ** sMatchStr指定的字元(串) ** sReplaceStr替換為的新字元(串) */ int ReplaceStr(char* sSrc, char* sMatchStr, char

loadrunner常用函式()

 一.事務函式lr_end_sub_transaction/標記子事務的結束以便進行效能分析lr_end_transaction/標記LoadRunner事務的結束lr_end_transaction_instance/標記事務例項的結束以便進行效能分析lr_fail_tr

loadrunner 常用函數

... http ner name abort .com runner style () lr_eval_string: 用來存放loadrunnner 定義的變量 lr_eval_string("<opt_items_count}") lr_abort:

Loadrunner常用15種的分析點

http 隨著 不同 vuser style 虛擬用戶 一次 分析 fail 1、Vusers:提供了生產負載的虛擬用戶運行狀態的相關信息,可以幫助我們了解負載生成的結果。   2、Rendezvous(負載過程中集合點下的虛擬用戶):當設置集合點後會生成相關

Loadrunner常用函數

註意 ram 類型 使用 submit 數字 ner 地址 節點 1,變量轉參數/賦值lr_save_string("aaa","param"):將字符串“aaa”,另存為param。 2,參數轉變量char var[10];strcpy(var,lr_eval_stri

DB2常用函式三:日期時間函式

DATE函式  語法:DATE(ARG)  DATE函式返回一個日期、時間戳、日期字串、時間戳字串中的日期。 Sql程式碼 eg:       SEL

DB2常用函式二:型別轉換函式

CAST表示式用來轉換型別使用 Sql程式碼    SELECT CAST(CURRENT TIME AS CHAR(8) )&nb

loadrunner其他函式

1.漢字進行UTF-8編碼 lr_convert_string_encoding("需要進行UTF-8加密的中文字串",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"result"); result是轉碼後的字串   2.lr_vuser_status_message

MKL——常用函式說明

Intel MKL,全稱 Intel Math Kernel Library,提供經過高度優化和大量執行緒化處理的數學例程,面向效能要求極高的科學、工程及金融等領域的應用。MKL是一款商用函式庫,提供C、Fortran 和 Fortran 95的支援,但僅支援Intel自家旗下的CPU。 在In

MySQL - 常用函式

SELECT truncate(1314.1314*100, -3); # 131000 SELECT truncate(1314.1314, 0); # 1314 SELECT FORMAT(423423234.65534453,2); # 423,423,234

Python中正則表示式常用函式sub,search,findall,split等使用

1.原生字串r python中字串前面加上 r 表示原生字串,不會轉義。與大多數程式語言相同,正則表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正則表示式裡將需要4個反斜槓"\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜

tensorflow常用函式之tf.nn.softmax

關於softmax的詳細說明,請看Softmax。  通過Softmax迴歸,將logistic的預測二分類的概率的問題推廣到了n分類的概率的問題。通過公式    可以看出當月分類的個數變為2時,Softmax迴歸又退化為logistic迴歸問題。

JavaScript常用函式總結

 最近正在學習js語法,講到函式這一塊內容,感覺有些細節還是挺有用的,所以發文總結一下。      javascript這門語言本身就是一種弱型別語言,它不和像java, c ,c#等等這些語言一樣,在宣告變數和方法的時候不需要對齊進行指定資料型別的修飾,

LoadeRunner常用函式

1. Intweb_reg_save_param("引數名","LB=左邊界","RB=右邊界",LAST);/註冊函式,在引數值出現的前面使用,註冊成功時返回值為0,註冊失敗時返回值為1。左右邊界需根據TreeView裡相關步驟的SeverResponse程式碼來確定。用以上函式能獲取第

Julia:Dict的用法以及一些dict的常用函式

function printsum(a) println(summary(a), ": ", repr(a)) end # dicts can be initialised directly: a1 = Dict(1=>"one", 2=>"two") printsum(a1)

7 mysql常用函式

1  檢視資料庫版本       2  檢視當前資料庫         3  檢視當前登入使用者名稱           4&nbs

ClickHouse常用函式統計

1、統計類函式 1.1 分位數 90%分位數: quantile(0.9)() 在求(平均)響應時間時用到,quantile(0.9)(url_rt) 1.2 中位數 median() 還未使用到,median(url_rt) 1.3 相關係數 計