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小端十進制
一般情況下,單引號‘的轉義比較常見。