LR高級技巧實戰

發表于:2008-09-25來源:作者:點擊數: 標簽:高級實戰技巧
1.概述 在山東BOSS性能壓力 測試 過程中,發現腳本對于整個 壓力測試 過程的重要性,一個壓力 測試腳本 錄制和編輯修改得怎么樣直接影響后面壓力測試的執行。通常情況下,腳本應盡可能的精簡,就像寫代碼一樣。針對BOSS系統的特點, 個人 認為把單一業務錄

1.概述
        在山東BOSS性能壓力測試過程中,發現腳本對于整個壓力測試過程的重要性,一個壓力測試腳本錄制和編輯修改得怎么樣直接影響后面壓力測試的執行。通常情況下,腳本應盡可能的精簡,就像寫代碼一樣。針對BOSS系統的特點,個人認為把單一業務錄制成一個Action,并在腳本中添加Transaction,Find檢查(可以采用URL-based scrīpt 方式錄制并事先設定),Rendezvous,參數化等基本元素,然而有時我們會發現光有這些基本元素還不能滿足我們的要求。比如在Controller中運行我們的腳本時,一旦壓力過大或某種原因導致某一業務失敗,而此時我們很想盡快地找出錯誤的原因。當然此時我們第一想到的是,查找日志,但是有時發現查找日志很不方便,因此我們希望尋求一種更快捷的方式,希望能直接從Controller的Errors錯誤中找到出錯的服務號碼、在第幾次Iteration的哪個Transaction出錯。實現的方式,當然是通過簡單的編程來調用錯誤日志里的信息,另外本文中還簡單介紹了關于LoadRunner工具使用的一些常用注意事項、腳本處理技巧和一些常用性能參數的分析及性能測試中機器瓶頸的定義和查看機器瓶頸的相關命令。
        下面再具體的一一介紹。

2.一個規范的性能測試腳本就像一段規范的程序代碼一樣,需要基本的說明信息:
在下面要介紹的腳本中,我把這些信息以注釋的形式放在vuser_init最前面:
/*
@corporation:Copyright By *** Technologies CO.,LTD. All Rights Reserved.
@Athour:XuLinLin
@Date:2005-09-18
@Name:異地繳費壓力測試腳本
@Parameter:BOSSURL,LogName,PhoneNum,iteration,FanHui
@Data:BOSSURL:BOSSURL.dat; //由于BOSS壓力測試前臺展現環境多,故將地址也參數化。
LogName:LogName.dat; //登錄用操作員,選擇具備異地繳費權限的操作員,這里選擇的是德州操作員300個。
PhoneNum:PhoneNum.dat; //用于異地繳費的服務號碼,這里選擇的是煙臺的正常在用的標準全球通號碼3000個。
iteration:iteration.dat; //用于壓力測試出錯時,打印出錯所在的循環次數。
@Descrīption:此腳本用于測試異地繳費的性能及穩定性,選用德州的操作員對煙臺的標準全球通號碼進行異地繳費,目標是
通過vuser模仿真實操作員進行異地繳費,達到驗證或測試系統性能和穩定性的目的。
@Notes:腳本的錄制使用的是LoadRunner8.0的VU,采用的是URL-based scrīpt方式,需要特別注意的是Recording Options(按Ctrl+F7)
的Advanced 選項里的Surport Charset一般情況默認為不選,除非字符集合采用的是國際標準才選中UTF-8選項,否則會出現漢字亂碼現象。
*/

3.通常情況下,任何業務必須在登陸成功后才能做,所以有必要對登陸成功與否進行判斷:
下面我從腳本中取出相關部分進行簡單介紹:
vuser_init()
{
int status; //定義變量用于判斷登陸是否成功
web_reg_find("Text=山東移動BOSS",
LAST);
…….
…….
web_submit_data("reguserAction.do", //登陸提交數據Action。
"Action=http://{BOSSURL}/boss/reguserAction.do",
"Method=POST",
"RecContentType=text/html",
"Referer=http://{BOSSURL}/boss/index.jsp",
"Snapshot=t12.inf",
"Mode=HTTP",
ITEMDATA,
"Name=logname", "Value={LogName}", ENDITEM,
"Name=password", "Value=", ENDITEM,
LAST);
status = web_submit_data("reguserAction.do", // 取成功與否標志
"Action=http://{BOSSURL}/boss/reguserAction.do",
"Method=POST",
"RecContentType=text/html",
"Referer=http://{BOSSURL}/boss/index.jsp",
"Snapshot=t12.inf",
"Mode=HTTP",
ITEMDATA,
"Name=logname", "Value={LogName}", ENDITEM,
"Name=password", "Value=", ENDITEM,
LAST);

if (status == LR_FAIL) //一旦登陸失敗,腳本給出提示報錯信息。
{
lr_error_message("錯誤信息: %s", "不能正常登陸!");
return -1;
}
}

4.事務的定義,很簡單,也很有必要,盡量是每個定義的事物符合邏輯和小。
在下面的腳本中,在異地繳費這一業務中定義了兩個Transaction:準備異地繳費數據和提交異地繳費,見如下腳本代碼:
lr_start_transaction("準備異地繳費數據");


web_set_max_html_param_len("4096");
……….
web_submit_data("chargeacc.do",
"Action=http://{BOSSURL}/boss/charge/commonbusiness/acccharge/chargeacc.do?act=queryaccount",
"Method=POST",
"RecContentType=text/html",
"Referer=http://{BOSSURL}/boss/charge/commonbusiness/acccharge/acccharge.jsp?act=first",
"Snapshot=t74.inf",
"Mode=HTTP",
ITEMDATA,
"Name=isconfirm", "Value=no", ENDITEM,
"Name=chargetype", "Value=telnumber", ENDITEM,
"Name=telnumber", "Value={PhoneNum}", ENDITEM,
"Name=nowfee", "Value=0.0", ENDITEM,
"Name=factfee", "Value=", ENDITEM,
"Name=totalfee", "Value=0.0", ENDITEM,
LAST);
lr_end_transaction("準備異地繳費數據", LR_AUTO);

5.增強腳本,對腳本進行簡單的編程。
增強腳本,對腳本進行簡單的編程,為性能或壓力測試提供方便,這也是寫
本文的宗旨,下面對此做簡單的介紹:
        5.1首先,定義成功與否的判斷標志或字符串。
        在此,我把判斷成功與否的標志定義在異地繳費Action 最前面,具體定義如下:char fanhuiflag[30]="操作業務數據成功!";
但是大家可能會問,字符串"操作業務數據成功!"從何處而來,可以肯定的不能憑空想象,成功標志可從兩三種方式來取得:
第一種:也是最簡單的一種,直接從腳本中取得,具體操作是以View Tree 方式找到相關的界面,然后從Server Response的Snapshot的Body里去取。見下面的圖片
注:Snapshot在錄制前要將Recording Options>Advanced里的Save snapshot resources locally 選項選中。

 


        第二種方式,從腳本代碼中去取,即取find函數中相關字符串,具體做法是,找到在提交事件前的web_reg_find函數,然后從中取相關字符串。
web_reg_find("Text=---------操作業務數據成功!--------",
LAST);
值得注意的是要有web_reg_find函數,可以在錄制前選中Recording Options>Advanced里的Generate web_reg_find functions for page titles 選項。


       

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97