測試回顧版-Loadrunner指令碼程式設計(2)-
Web使用者Action
在VuGen中,指令碼產生的預設模式是基於HTML的--“描述使用者的動作的指令碼”直接與使用者的動作是對應的:
* web_url是瀏覽器位址列的URL.
* web_link是點選在<a href= ...>和<a>之間的文字超連結。
* web_image是點選HTML的<img href= link.
* web_submit_form 是在前面操作的上下文中的GET或PUT表單上點“提交”--可能前面的操作被VuGen在基於HTML模式下錄製下來了。
* web_submit_data 是在GET或PUT表單上點“提交”,而沒有帶前面操作的上下文--可能是在基於URL模式下錄製,或者是基於HTML模式,並且選擇了“A scrīpt containing explicit URLs only”選項。
不用HTML產生的資源是.gif和.jpg圖片。資源屬性的列表只能當對這些資源的路直選項設定成“Record within the current scrīpt step”時被插入。這也是預設的設定。
如果你在“Tools > Internet Procotol > Recording”中選擇“a scrīpt containing explicit URLs only”,這將會產生URL-based的指令碼錄製,只使用web_url和web_submit_data函式,將不會使用 web_link 和 web_image函式,或包含在 applets, XML, ActiveX或javascrīpt中的非HTML元素。
在進行下一頁錄製之前(如點選連結或者圖示),暫停錄製,把該頁螢幕的標題拷貝下來貼上到註釋中。錄製完成之後,這將會在後面的給事務命名上用到。
在每一個頁面顯示之後,暫停錄製,把決定是否是期望頁的文字拷貝下來,貼上到註釋中。錄製完成之後,這將會用到文字驗證檢查點的指令碼編寫中。
錄製中產生的各種資訊都儲存在RecordingLog.txt檔案中,刪除它不會對指令碼的回放產生影響。
額外錄製的Action指令碼
錄製指令碼的時候,當瀏覽器沒有安裝SSL根證書的時候,會捕獲的下面這些程式碼行。這個資訊意思是“這個證書不能被信任證書驗證”。
web_url("authrootseq.txt",
"URL=http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootseq.txt",
"Resource=1",
"RecContentType=text/plain",
"Referer=",
web_url("authrootstl.cab",
"URL=http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab",
"Resource=1",
"RecContentType=application/octet-stream",
"Referer=",
LAST);
錄製指令碼的時候,但瀏覽器遇到Macromedia flash元件的時候,會產生下面的程式碼行:
"URL=http://fpdownload.macromedia.com/pub/flashplayer/update/current/xml/version_en_win_ax.xml",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
web_url("version_en_win_ax.xml",
如果你安裝有Google Toolbar,即使你沒有訪問Google,也會錄製上發到Google的請求。
指令碼語言規則:
在LoadRunner中,大小寫是敏感的,甚至在被檢驗的值中。所以上面的指令碼會因為大寫字母的原因,不會識別“Welcome”的。所以Steve Cheney 建議使用“ic”忽略大小寫的文字標誌:
web_reg_find("Text/ic=Welcome",LAST);
括號裡的引數包含了LAST 是為了指定最後的一個引數。這樣做是很方便的,因為上面的例子漏掉了一個指定期望是“found”還是“notfound”的屬性。預設是“found”,所有我經常忽略它。
另一個文字標誌是“/BIN”用來指定是二進位制的字符集。例如,查詢“Adams”:
web_reg_find("Text/BIN=//x00A//x00d//x00a//x00m//x00s",LAST);
注意兩個反斜槓,一個是轉義字元,代表是使用了一個符號。如果錯誤的只使用一個反斜槓,LR會認為它是一個空的終止。
下面的例子指令碼是在UTF8伺服器上支援獲得newquoteuid為UTF-16編碼。因為LoadRunner中,UTF16編碼的“Red”用ASCII是 R/x00e/x00d/x00 這樣的,所以需要把它儲存到buffer中。
lr_eval_string_ext("{newquoteuid_temp}",
strlen("{newquoteuid_temp}") + 2,
&Buf, &BufLen, 0, 0, -1);
對字元陣列變數NewBuf使用lr_save_var函式來去掉額外的填充(x00):
for (i=0; i if (Buf[i]!=0) NewBuf[NewBufLen++]=Buf[i];
lr_save_var(NewBuf, NewBufLen-1, 0, "newquoteuid");
注:lr_save_var 需要四個引數(不需要使用LAST)
1.param_value 引數值
2 value_len 引數的長度。
3 options 引數的選項,一般為0
4。param_name 引數名稱
lr_save_var
Saves a variable length string to a parameter.
lr_eval_string function.
Returns the string argument after evaluating embedded parameters.
The lr_save_var function assigns the specified variable length string to a parameter. This function is useful in correlating queries. To determine the value of the parameter, use the
LoadRunner 7.8不支援正則表示式,但是有他自己的萬用字元:
為了使任何[0-9] 的數字在指定的數字位置,使用/DIG做標誌:
web_reg_save_param("pSer","LB/DIG=Serial XXX-###-ZZZZ","RB=/r/n", LAST );
有三種使用^做萬用字元的方法:
* 忽略大小寫,並且允許在指定的字元位置使用任意字元:
web_reg_find("Text/ALNUMIC=^ercury", LAST);
* 允許任何小寫字元[a-z] 在指定位置:
web_reg_find("Text/ALNUMLC=^ercury", LAST);
* 允許任何大寫字元[A-Z]在指定的字元位置:
web_reg_find("Text/ALNUMUC=^ercury", LAST);
把一個字串變成大寫:strupr()
錯誤資訊:
請新增一些其他的錯誤資訊來幫助其他人:
Could not resolve address of host ... [MsgId: MERR-27798]
如果網路不能用或者域沒有註冊的話,顯示一個404的DNS錯誤
Contents unexpectedly not in cache. [MsgId: MERR-26549]
當一個檔案為空時會顯示該錯誤。在空檔案中新增空格來滿足LoadRunner的錯誤檢查。BTW,因為當建立的iframe沒有檔案時,IE會產生一個錯誤,這樣就指定了一個空檔案。
事務時間指令碼編寫:
我更喜歡給一個action命名事務,而不是一個結果頁面。
lr_start_transaction("00.1 Invoke URL");
...
lr_end_transaction("00.1 Invoke URL",LR_AUTO);
...
lr_start_transaction("01.2 Top menu");
...
lr_end_transaction("01.2 Top menu",LR_AUTO);
lr_start_transaction("02.0 Updating");
lr_start_sub_transaction("02.1 Update menu","02.0 Updating");
web_url( ...
lr_end_sub_transaction("02.1 Update menu",LR_AUTO);
lr_start_sub_transaction("02.2 Update submit","02.0 Updating");
web_submit_form( ...
lr_end_sub_transaction("02.2 Update submit",LR_AUTO);
lr_start_sub_transaction("02.3 Update OK","02.0 Updating");
...
lr_end_sub_transaction("02.3 Update OK",LR_AUTO);
lr_end_transaction("02.0 Updating",LR_AUTO);
我喜歡在一個層次結構中使用0填充的事務名稱,這樣來確保控制器能夠正確的給事務排序。
我對不同型別的action上的事務名稱上加不同的關鍵字
Contact Link = Click "Contact" link on Menu
Contact Icon = Click "Contact" Icon
Regis. Sub = Page Submit
OK = Pop-up dismiss with OK
事務名可以是變數,但是它只能被VuGen作為字串來編譯,不能在控制器的介面中顯示。無論如何,他們會顯示在分析結果檔案中。
對於web指令碼,LR自動建立和決定事務的的持續時間,但是C語言指令碼可以使用這些函式:
使用lr_start_transaction_instance函式來顯式獲得指定事務例項的控制代碼,事務名稱在函式lr_user_data_point_instance或lr_user_data_point_instance_ex中使用。
使用 lr_start_sub_transaction在一個事務中來操作思考時間和消耗的時間。