LR11中關聯設定
LR中關聯建議都手動進行,自動不好用,也容易出錯。
在LR中我們什麼要做關聯:
1、關聯解決的是動態資料的引數化。
2、關聯的資料一定是伺服器響應的資料。
3、伺服器響應過來的資料在後面的服務還要使用。
手動關聯應該如何做?
手動關聯的執行步驟大致如下:
①、使用相同的業務流程與資料,錄製兩份一樣的指令碼。
②、找出錄製好的兩份指令碼中不同的地方。(可以使用LR自帶的對比工具:tools -->"compare with Script"),確定指令碼中那些地方需要關聯。
③、確定指令碼中關聯函式的插入位置。
④、在指令碼中使用web_reg_save_param函式來手動新建關聯。
⑤、在指令碼中把要關聯的動態值引數化。
⑥、回放指令碼來驗證關聯是否成功。
一、使用相同的業務流程與資料,錄製兩份一樣的指令碼。
錄製方法參考前面部落格(win7+chrome最新版本)的錄製方法。
二、找出錄製好的兩份指令碼中不同的地方。(可以使用LR自帶的對比工具:tools -->"compare with Script")
使用LR自帶的對比工具WinDif:tools -->"compare with Script",來進行對比所錄製的兩份指令碼。
自行對比兩份指令碼中有差異的地方:
①、每一個差異都有可能是需要做關聯。
②、思考時間是不需要做關聯。
③、對於圖片、css等內容,一般都不是我們關心的,我們需要關聯伺服器返回資訊,Header還是Body。
確定好需要關聯的內容後,複製下來。開啟Generation Log,按Ctrl+F,在查詢視窗中貼上差異部分的內容,點選查詢找到後,檢視該部分
的資訊,確認是客戶端的請求資訊還是伺服器迴應的資訊:
①、如果出現在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$這個部分,那證明是客戶端發出的請求,這裡是不需要做關聯的。
②、一般做的關聯都是出現在****** Response Header For Transaction With Id 7 ******和****** Response Body For Transaction With Id 7 ******中的部分。
在找到這個資訊後,需要記錄如下資訊:
記錄這個不同資料之前的內容和之後的內容:
a、記錄這個不同資料之前的內容和之後的內容
b、記錄這個不同資料出現的位置,是Header還是Body
三、確定指令碼中關聯函式的插入位置。
注意:關聯函式是一個註冊型函式,我們需要告訴vugen你下面的請求返回是需要被處理的,所以該函式必須要寫在我們的請求
前,否則就會提示無法獲得關聯結果的錯誤。這是絕大多數使用關聯新手最容易犯的錯誤。
在之前的步驟,我們已經generation log中確定了需要關聯的動態資料,複製動態值部分進行關聯就可以進行關聯了,但是我們的關聯函式 web_reg_save_param應該插入到指令碼的什麼位置呢??
確定位置的方法:
①、所以我們需要再重新執行一遍指令碼,而且這次會開啟所有的Log。
在VuGen中點選【Vuser】>【Run-Time Settings】>【General】>【Log】>勾選【Enable logging】、【Always sends messages】、【Extended log】以及【Extended log】下的所有選項,按下【OK】,然後就可以執行指令碼了。
②執行完指令碼之後,複製前面在Generation Log找到的動態值所在行的其他指令碼內容(而不是動態值本身)在Repaly Log中進行查詢。找到字串後,在字串前面會有Action.c(4):,這個4就是到時候要插入web_reg_save_param函式的位置。
也就是要插入到指令碼的第4行。在指令碼中,使用ctrl+g就可以到達指定的行。
為什麼關聯函式要插入到第4行?而不是動態值所在的那一行?因為web_reg_save_param函式為註冊函式,必須在動態值的前面,相當於先宣告,後作用。注意:並不是在動態值的前面就行了,一定得在該動態值所屬的請求前。
四、在指令碼中使用web_reg_save_param函式來手動新建關聯
1、在確定好的插入關聯函式的位置,右鍵"insert"—>'new step'
2、在Find Function裡面輸入:web_reg_save_param 查詢找關聯函式。點選OK。
3、填寫關聯函式對應值。
【關聯函式引數說明】
ParamName:存放動態資料的引數名稱。取的名稱儘量見名知意。關聯出來的內容將會存放在這個命名的引數中。
Left Boundary :左邊界,這裡是用來填寫我們關聯時對於資料處理的左匹配內容規則。該屬性必須有,並且區分大小寫。凡是對話方塊後面又ABC按鈕的,說明對應的值支援引數化。
Match case:區分大小寫 。
Binary data:二進位制資料 如果需要關聯的內容是2進位制(16進位制)。那麼我們需要選填該選項。
use # for any digit: 使用#表示任何數字。
使用^作為字母數字字元的萬用字元。all:表示所有的字母數字字元。 lowercase:表示所有小寫的字母數字字元。uppercase:表示所有大寫的字母數字字元。
Right Boundary : 右邊界。這裡是用來填寫我們關聯時對於資料處理的左匹配內容規則。規則同左邊界。
Instance:指明從第幾次出現的值開始才是要擷取的資料。此屬性質可有可無,預設值是1。假如值為All,則所有找到符合的資料會儲存在陣列中。 這個關鍵字在很多函式中都有應用,對應指令碼的ORD=關鍵字。
Relative FrameID:這個選項是專門針對框架結構的網站設計的,我們有些時候需要關聯的內容是在框架中的某一箇中,這個時候我們就需要說明所關聯的頁面是框架中的那一個了。
Notfound:指定當找不到要找的動態資料時該怎麼處置。
Notfound=error:當找不到動態資料時,發出一個錯誤訊息。假如沒設定此屬性,此為LoadRunner的預設值。
Notfound=warning:當找不到動態資料時,不發出錯誤訊息,只發出警告,指令碼也會繼續執行下去不會中斷。在對角本除錯時,可以使用此屬性值。
Search in:搜尋的範圍。可以是Headers(只搜尋headers)、Body(只搜尋body部分,不搜尋header)、 Noresource(只搜尋body部分,不搜尋header與resource)或是All(搜尋全部範圍,此為預設值)。此屬性質可有可無。
SaveLength:從offset開始算起,到指定的長度內的字串,才儲存到引數中。此引數可有可無,預設值是-1,表示儲存到結尾整個字串。
SaveOffset:當找到符合的動態資料時,從第幾個字元開始才開始儲存到引數中。此屬性不可為負數,其預設值為0。
Ignore redirections:忽略重定向 如果該項被選中,則不會到重定向頁面的Response中去查詢,預設選項是no
總結:關聯函式中的這些引數存在的目的主要是幫助使用者去確定需要關聯內容的唯一性,所以使用時應靈活運用,只有ParamName、LB、RB這三個引數是必須的,其他的都不是,但一般會再用上Notfound=error,這樣如果沒關聯到我們容易發現錯誤。
五、在指令碼中把要關聯的動態值引數化。
在指令碼中選中選擇需要關聯的動態值,右鍵>Replace with a Parameter>將引數名改為前面設定關聯函式中的引數名稱。paramerer type:採用預設的file即可。點選OK按鈕。.引數化後被引數的動態值部分粉紅色顯示。
六、回放指令碼來驗證關聯是否成功。
回放時,開啟所有log.
回放後檢視結果view>Test Resuilts來查看回放通過情況。
附:關聯中常用的轉義內容
\a 鈴聲(警告)
\b Backspace鍵
\f 換頁
\n換行
\r回車
\t水平製表符
\v垂直製表符
\'單引號標記
\"雙引號標記
\\反斜槓
\? 文字文號
\ooo ASCII 字元-八進位制
支援的轉換字元有:
%a ASCII 表示形式
%BX 大端(網路順序)十六進位制
%BO大端(網路順序)八進位制
%BD大端(網路順序)十進位制
%LX小端十六進位制
%LO小端八進位制
%LD小端十進位制
一般情況下,單引號‘的轉義比較常見。