Loadrunner11-關聯

一、什麼是關聯
關聯(correlation):腳本回放過程中,客戶端發出請求,通過關聯函數所定義的左右邊界值(也就是關聯規則),在服務器所響應的內容中查找,得到相應的值,已變量的形式替換錄製時的靜態值,從而向服務器發出正確的請求,這種動態獲得服務器響應內容的方法被稱作關聯。也是把腳本中某些寫死的數據,轉變成動態的數據。
什麼內容需要關聯:當腳本中的數據每次回放都發生變化時,並且這個動態數據在後面的請求中需要發送給服務器,那麼這個內容需要通過關聯來詢問服務器,獲得該數據的變化結果。例如:
  1.登錄字符串。帶有會話 ID 或時間戳等動態數據的登錄字符串。
  2.日期/時間戳。使用日期或時間戳或者其他用戶憑據的任意字符串。
 
3.常見前綴。後跟字符串的常見前綴,如 SessionID 或 CustomerID
關聯分爲:自動關聯、邊錄邊關聯、手動關聯

 二、自動關聯---Correlation Studio
1.Correlation Studio:是執行腳本後纔會建立關聯。錄製完腳本後須被執行過一次,Correlation Studio纔會嘗試找出錄製與執行時,服務器響應內容差異部分,以找出需要關聯的數據,並建立關聯。缺點是無法對特殊規則動態進行關聯。
以錄製註冊百度用戶腳本爲例:
1.錄製腳本並回放腳本。


2.按ctrl+f8掃描腳本並建立關聯,掃描完後,可以在腳本下方的【Correlation Results】中看到掃描的結果,可以選擇【All Action 】、【Current acton】或者 【current Step Only】選項,點擊【Correlate】按鈕進行關聯。
3.關聯成功後切換到Script View視圖,可以看到腳本多了關聯函數web_reg_save_param_ex(),而關聯出來的內容分別被保存到CorrelationParameter_1、 CorrelationParameter_2、 CorrelationParameter_3參數中去。如圖: 4.web_reg_save_param_ex()函數可以代替web_reg_save_param()函數。此函數搜索 Web 步驟中左邊界後爲字符串和右邊界的服務器響應,並將字符串保存到函數實參中指定的形參。        
web_reg_save_param_ex("ParamName=CorrelationParameter_1",
                   "LB= value=\"",
                  
"RB=\">\r\n<input type",
                  
SEARCH_FILTERS,
                 
 "Scope=Body",
                  
"RequestUrl=*/passport.baidu.com/*",
                  
 LAST);
IC 和 /BIN 在web_reg_save_param都是有的
/RE 是web_reg_save_param_ex纔有,意思是左右邊界值可以使用正則表達式。
"RB/RE=\" name=\"chkItem_......\"\r\n    中的......就表示任意字符了。
Scope 表示搜索的範圍
RequestUrl 表示指定的請求(如點擊一個按鈕,可能有幾個請求鏈接組成的,通過這個屬性可以縮小範圍)

三、邊錄邊關聯---Rules Correlation
Rules Correlation
啓用系統默認提供的自動關聯設置,在錄製過程中VuGen會根據已經制定的規則,自動找出要關聯的值。
內建關聯(Bulit –in Correlation)
針對常用的一些應用系統,如oracle、peopleSoft、Siebel等,內建關聯規則,這些應用系統可能會有一種以上的關聯規則。在【Recording Options】>【Correlation】中啓用關聯規則,則當錄製這些應用系統的腳本時,VuGen會在腳本中自動建立關聯。如圖:

四、用戶自定義關聯規則(User-defined Rules Correlation)
在【 Recording Options】>【Correlation】建立新的關聯規則。點擊【new Application】按鈕建立關聯,然後在這個應用下點擊“New rule”按鈕添加對應的關聯規則。
以錄製登錄Webtours訂票系統爲例:
第一步,在Recording Options-Correlation中建立關聯規則,單擊New Application按鈕,新建一個叫做lrwebtours的應用,然後在這個規則上單擊New Rule 按鈕新建一個規則,名叫usersessionid,爲該規則填寫左右規則,左邊界爲userSession Value=, 右邊界爲>,確定後保存。如下圖:

2.開始錄製webtours訂票系統登錄業務。
3.錄製完訂票系統登錄業務腳本後,可以發現系統已經自動按照規則生成了關聯函數,運行腳本直接通過。

手動關聯是關聯應用的最有效手段,通過函數web_reg_save_param()進行關聯。web_reg_save_param()將想要的字符串保存到一個參數中。
web_reg_save_param函數主要根據需要做關聯的動態數據前面和後面固定字符串來識別、提取動態數據,所以在關聯時需要找出動態數據的左、右邊界字符串。
Web_reg_save_param函數格式:
web_reg_save_param(const char*ParamName,<list of Attributes>,LAST

參數名 參數說明
ParamName 存放動態數據的參數名稱
List of Arrtributes 其它屬性,包含NotfoundLBRBRelFrameID SearchORDSaveoffsetConvert以及SaveLen
NOTfound 指定當找不到要找的動態數據時該怎麼處置。notfound=error:當找不到動態數據時,發出一個錯誤信息,此爲loadrunner的默認值。notfound=warning:當找到動態數據時,不發出錯誤信息,只發出警告,腳本也會繼續執行下去不會中斷。
LB 動態數據的左邊界字符串,該參數爲必選參數,而且區分大小寫。要忽略大小寫,請在邊界之後添加“/IC”。如果在邊界之後指定“/BIN”,則指定爲二進制數據
RB 動態數據的右邊界字符串,該參數爲必選參數,而且區分大小寫。要忽略大小寫,請在邊界之後添加“/IC”。如果在邊界之後指定“/BIN”,則指定爲二進制數據
ORD 此可選參數表示匹配的序號或出現的次數,該參數爲必選參數,默認值是1。如果指定“All”,是將所有找到的動態變量保存到數組中。
Search 搜索的範圍,可以是headers(只搜尋頁眉)body(只搜尋正文部分,不搜尋頁眉)、Noresource(只搜尋正文部分,不搜尋頁眉與resource部分)或是all (搜尋全部範圍),該參數爲可選參數
RelFrameID 與請求的 URL 相關的 HTML 頁的框架結構層次級別。可以爲 ALL 或數字
Saveoffset 設置關聯的內容偏移量,從第幾位開始進行關聯操作。此屬性值不可爲負數,默認是0
Convert

可能的值有兩種。

HTML_TO_URL:將HTML-encoded數據轉成URL-encoded數據格式。

HTML_TO_TEXT:HTML-ecncoded數據轉成純文字數據格式。
Save length 關聯出來的內容所需要保存的長度。從offset開始算起,到指定長度內的字符串,才儲存到參數中,該參數爲可選參數,默認值是-1,表示儲存到結尾整個字符串。

關聯函數的注意事項:
1.關聯函數是一個註冊函數,必須寫在請求前,否則就會提示無法獲得關聯結果的錯誤。
2.保存參數最大不能超過256字節,如果超過256字節請使用int web_set_max_html_param_len (const char *length )函數擴大參數保存範圍。
 例如:web_set_max_html_param_len (“1024”); //擴大參數最大保存範圍爲1024字節。
3.如果輸入的內容裏面有雙引號,那麼需要通過轉義符來進行處理,轉義符爲\。Web_reg_save_param(“param”,“LB=\”左邊界”,“RB=”,LAST);
4.關聯函數的作用一種規則將服務器的返回保存到一個參數中,所以爲查看參數的內容,應勾選參數取值的Extended log日誌的三個選項。運行腳本查看Reply log日誌,會看到藍色參數值羅列出來”Notify:saving Parameter =“,後面都是被關聯到的服務器返回關聯值。
5. 動態數據需要關聯的服務器返回信息一般都保存在HTML正文中。所以關聯函數中設置將search in=Noresource,也就是只需要關聯HTML、XML等資源。
6.修改關聯函數:1.直接在代碼上直接修改,2切換到tree模式,雙擊關聯函數進行修改。
7.整個HTTP請求分爲兩段,一段是開頭的HTTP頭數據包,叫做header,另外一段就是HTML頁面,叫做body。
8.關聯函數轉義符:

轉義符號 說明
\b Backspace
\f 換頁
\n 換行
\r 回車
\t 水平製表符
\v 垂直製表符
\’ 單引號標記
\’’ 雙引號標記
\\ 反斜槓
\? 文本問號

 

 

 

 

 





關聯操作步驟:

第一步:錄製兩份相同的業務流程的腳本,輸入的數據要相同
第二步:用winDiff工具,找出兩份腳本之間不同之處,確定需要關聯的動態數據,在請求返回中找到動態數據的左右邊界
第三步:用web_reg_save_param()函數手動建立 關聯,將腳本中用到關聯的數據參數化,將關聯的值提供給後續請求頁面使用。
以錄製登錄Web tours 系統爲例:  
1.錄製兩份相同的登錄Web Tours網站腳本
2.用WinDiff工具,找出兩份腳本之間的不同,也就是需要關聯的數據。
(1)用 lr打開第二份腳 本,依次選擇[tools]>[compare with vuser…]項,在彈出對話框中選擇第一份腳本。
(2)用lr調用WinDiff工具,顯示兩份腳本, WinDiff工具會以一整行黃色標示顯示有差異的腳本代碼行。可以看到有三處不一樣,第一處是userSession,另外二外是點擊按鈕時的x,y座標。 lr_think_time思考時間不同,可以忽略。如圖:

(3)在Generation log中打開[find]對話框,粘貼userSession的值,查找在Generation log出現的位置。如果在Generation Log中找到了要找的數據,這時要確認是從服務器端傳送過來的數據。如圖:
      如果出現在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$這個部分,那證明是客戶端發出的請求,這裏是不需要做關聯的
      一般做的關聯都是出現在****** Response Header For Transaction With Id 7 ******和****** Response Body For Transaction With Id 7 ******中的部分。
3.確認插入關聯的位置
關聯函數寫到發出請求的函數之前,我們將關聯函數插入在Web tours登錄頁面:
4.插入關聯函數
(1)通過設置左右邊界字符串,找出變化的數據(即需要做關聯的數據)並將其儲存在一個參數中,以供後續腳本使用。我們設置登錄web tours腳本userSession的左邊界爲userSession value=,右邊界爲>,search=body,ord=3,如圖:

(2)插入關聯函數。
1.右鍵選擇“Insert-New Step” 在彈出的“add step”對話框的“find function”中輸入
在“Parameter name”中輸入關聯函數的名稱 “usersessionid”
在“Left Boundary”中輸入“userSession value=”
在“Right Boundary”中輸入“>”
在“Search in ”中選擇“body”
在“Instance”輸入“3”
點擊“ok”即可。如圖:

5.將腳本中有用到關聯的數據,用參數代替將原來服務器返回的userSession動態值使用{usersessionid} 來替換:

6.驗證關聯的正確性。
回放腳本,出現vuser_init.c(12): Registering web_reg_save_param was successful [MsgId: MMSG-26390]信息說明關聯成功,也可以用打印函數lr_log_message把將得內容存入日誌用於檢查關聯是否成功。如圖:
lr_log_message(“getvalue : %s”,lr_eval_string (“{usersessionid}”));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章