LoadRunner最新版本中,使用的關聯函數為web_reg_save_param_ex,以前的版本使用的關聯函數為web_reg_save_param,但這兩個函數實質差別不大,本章節主要介紹關聯函數web_reg_save_param_ex,當然在新的版本中關聯函數web_reg_save_param還是可用的。
在測試過程中可以通過插入步驟的方式來插入關聯函數,在樹模式下選中需要插入步驟的位置,單擊右鍵在彈出菜單中選擇Insert Before菜單,彈出Add Step對話框,如圖所示。
在Find Function下拉列表框中輸入關聯函數web_reg_save_param_ex,單擊OK按鈕彈出web_reg_save_param_ex對話框,如圖所示。
關聯函數web_reg_save_param_ex的格式如下:
int web_reg_save_param_ex( const char *ParamName, [const char *LB, ][const char *RB,] <List of Attributes>, <SEARCH FILTERS>,LAST );
參數說明:
ParamName:表示創建的變數名稱。
LB:關聯規則的左邊界值。
RB:關聯規則的右邊界值。
List of Attributes:屬性列表,具體的內容在後面將詳細介紹。
SEARCH FILTERS:指定緩衝區中需要查找的字元串。
LAST:結束參數標誌。
變數名,表示將緩存區中查找到的內容保存到這個變數中。
設置查找緩衝區內容的左邊界值,當左邊界值未設置時或者設置為空值時,那麼左邊界則從數據的起始位置開始。
例:如待查找的句子"Where and when do you want to travel?",關聯函數如下:
web_reg_save_param_ex("When_Txt", "LB=Where and ", "RB= do", LAST );
其中左邊界值為「Where and」右邊界值為「do」,查找的結果為「when」。
設置查找緩衝區內容的右邊界值,當右邊界值未設置時或者設置為空值時,那麼右邊界則到數據結束處。
web_reg_save_param_ex("When_Txt", "LB=Where and ", "RB=", LAST );
其中左邊界值為「Where and」右邊界值為空值,查找的結果為「when do you want to travel?」。
在圖6-75中可以看到,不管是左邊界值還是右邊界值,其還有三個設置項:是否區分大小寫、是否針對二進位數據進行查找和是否使用正則表達式。而不管對於左邊界還右邊界來說,這三個選項的設置完成一致,所以進行統一的介紹。
1) Match case(是否匹配大小寫)
選中該選項,表示查找過程中,忽略左右界值大小寫的問題,即對大小寫不敏感。
例:如果需要在以下請求中查找內容。
<form method=post action=login.pl target=body>
<input type=hidden name=userSession value=108974.217253949fzAfDzVpDDDzDcpVzHi>
<table border=0><tr><td> </td>
關聯函數代碼如下:
web_reg_save_param_ex(
"ParamName=test",
"LB/IC=USERSession value=",
"RB=>",
SEARCH_FILTERS,
LAST);
關聯後的結果為:108974.217253949fzAfDzVpDDDzDcpVzHi,其中「LB/IC」表示左邊界值不區分大小寫,即左邊界「USERSession value=」與「userSession value=」是致的,如果區分大小寫的話,就無法查找到匹配的值。
2) Binary data(二進位數據查找)
如果需要查找的內容是非ASCII格式,二進位或十六進位格式的內容,這樣如果還按常用的左邊界和右邊界的方式來查找時,就無法找到需要的內容,此時就需要選中Binary data選項,通過二進位的方式來匹配待查找的內容。一般使用「\x」來標識,如\x37。
例:如待檢查的二進位內容\xAC\xED\x00\x05\x00。
關聯函數如下:
"ParamName=test4",
"LB/BIN=\xAC\xED\x00",
"RB/BIN=",
3) Regular expression(正則表達式匹配)
正則表達式是指一個用來描述或者匹配一系列符合某個句法規則的字元串的單個字元串。在性能測試過程中如果需要匹配的值不是精確的,而是模糊查詢,那麼此時需要使用正則表達式進行匹配。
LoadRunner中常用的正則表達式匹配的元字元見表6-1所示。
表6-1 元字元僦含義
元字元
含義
[
正則表達式開始的標識
]
正則表達式結束的標識
()
包括中的內容視為一組內容出現
^
匹配以某字元開始,如^abc表示查找以abc開頭的字元串
$
匹配以某字元結束,如abc$表示查找以abc結束的字元串
.
匹配一個字元,該字元可以是任意的字元
?
匹配前面一個字元或一組字元,匹配的次數為零次或一次。例如「ab?c」可以匹配「abc」和「ac」,「A(123)?B」可以匹配「AB」和「A123B」
+
匹配前面一個字元或一組字元,匹配的次數為一次或多次。例如「ab?c」可以匹配「abbbc」和「ac」,「A(123)?B」可以匹配「AB」和「A123123B」
*
匹配前面一個字元或一組字元,匹配的次數為零次或更多次
轉義字元
|
匹配「|」前面或後面的字元,例如,「(ABC)|(123)」可以匹配「ABC」或「123」
DFEs(Data Format Extensions)文件擴展格式。VuGen發生器中支持許多不同類型的數據記錄。隨著文件格式不斷的增加,而VuGen發生器又必須去支持這些格式,有一些格式是專有和使用自定義序列化,但二進位代碼和一些無格式的數據很難讓人理解,故VuGen發生器增加了數據格式擴展功能(DFEs),進這些格式的數據進行轉換,這樣可以更好的理解這些數據,同時也可以將這些數據做為參數進行關聯。
LoadRunner支持的數據擴展格式包括:Base64 Extension、URL Encodin Extension、JSON Extension和XML Validator Extension四種格式,具體見表6-2。
表6-2 數據擴展格式
數據擴展
描述
Base64 Extension
對Base64編碼進行解碼(Base64編碼是網路傳輸中最常用的8Bit位元組代碼的編碼方式之一)
URL Encodin Extension
對URL編碼進行解釋(URL編碼是一種瀏覽器用於打包表單輸入的格式)
JSON Extension
將JSON數據(JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition -December 1999)的一個子集。JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等))轉換為XML格式
XML Validator Extension
接受數據並檢查該數據是否符合XML語法,允許VuGen發生器關聯xpath查詢並且在xml視圖中顯示出其快照
如以下實例:
iRetVal = web_reg_save_param_ex(
"ParamName=newParam",
"LB/IC=ll",
"RB/BIN/RE=RR",
"Ordinal=all",
"SaveLen=-1",
"DFEs=UrlEncoding",
"Scope=body",
lr_output_message("Return value = %d (%s).", iRetVal, iRetVal == LR_PASS ? "LR_PASS" : "LR_FAIL" );
注意:如果需要使用DFEs擴展數據功能,那麼需要先在Run-time Settings設置對話框中,將【Enable Data Format Extension】複選項設置為可用。
Ordinal表示所匹配的內容出現的位置,預設值為1(指查找待匹配內容,第一次出現的情況),如果將該項值設置為All,是指在緩存中查找所能符合左右邊界的內容,並將查找到的結果保存在一個數據中,如果將其設置為1時,那麼查找到的結果將保存在一個變數中。
如以下實例,待查找的頁面內容如下:
<tr bgcolor=#EFF2F7><td align=center><input type = radio name=outboundFlight value=000;0;09/17/2012 checked >Blue Sky Air 000<td align=center>8am<td align=center>$ 0</TD></TR><tr bgcolor=#EFF2F7><td align=center><input type = radio name=outboundFlight value=001;0;09/17/2012>Blue Sky Air 001<td align=center>1pm<td align=center>$ 0</TD></TR><tr bgcolor=#EFF2F7><td align=center><input type = radio name=outboundFlight value=002;0;09/17/2012>Blue Sky Air 002<td align=center>5pm<td align=center>$ 0</TD></TR><tr bgcolor=#EFF2F7><td align=center><input type = radio name=outboundFlight value=003;0;09/17/2012>Blue Sky Air 003<td align=center>11pm<td align=center>$ 0</TD></TR></table>
"ParamName=WCSParam_Text1",
"LB=outboundFlight value="",
"RB=;",
"Ordinal=All",
回放的結果如圖所示。
Save Offset是指偏量,當使用左右邊界值匹配到合適的字元串內容後,可以設置從第幾個字元開始截取字元,預設值為0,即從第一位開始匹配。如匹配到的字元串為「soft testing」,當Save Offset設置為0時,從第一位開始截取,如果設置為2時,那麼從第三位開始截取,即返回匹配到的結果為「ft testing」。
例如:HTML中有一段字元串「Astra on the TESTSERVER」,關聯函數如下:
"Ordinal=1",
"SaveOffset=2"
匹配的結果為「 the」。
Save Length是指設置截取字元串的長度,如果設置為10是指在匹配到的字元中,截取10個字元,預設值為-1,匹配到字元串結束的位置。通常情況下Save Length屬性會與Save Offset屬性合起來使用。
"SaveOffset=0"
"SaveLen=2",
匹配的結果為「on」。
當頁面中有多個幀時,如果需要匹配幀裡面的數據時,需要指定某個具體的幀否則無法正確的匹配需要查詢的值,通過幀ID號可以指定訪問不同的幀,幀的ID最多隻能有7位組成,如以下例子。