1. 程式人生 > >loadrunner關聯及web_reg_save_param方法淺析

loadrunner關聯及web_reg_save_param方法淺析


一、什麼是關聯

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


3.
常見字首。後跟字串的常見字首,如 SessionID CustomerID

二、web_reg_save_param函式說明

語法:

int web_reg_save_param(const char*ParamName, <list of Attributes>, LAST);

引數說明:

· ParamName: 存放得到的動態內容的引數名稱

· list of Attributes: 其它屬性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。屬性值不分大小寫

o Notfound: 當在返回資訊中找不到要找的內容時應該怎麼處理

o Notfound=error: 當在返回資訊中找不到要找的內容時,發出一個錯誤訊息。這是預設值。

o Notfound=warning: 當在返回資訊中找不到要找的內容時,只發出警告,指令碼也會繼續執行下去不會中斷。

o LB( Left Boundary ) : 返回資訊的左邊界字串。該屬性必須有,並且區分大小寫。

o RB( Right Boundary ): 返回資訊的右邊界字串。該屬性必須有,並且區分大小寫。

o RelFrameID: 相對於URL而言,欲查詢的網頁的Frame。此屬性質可以是All

或是數字,該屬性可有可無。

o Search : 返回資訊的查詢範圍。可以是HeadersBodyNoresourceAll(預設)。該屬性質可有可無。

o ORD : 說明第幾次出現的左邊界子串的匹配項才是需要的內容。該屬性可有可無,預設值是1。如為All,則將所有找到的內容儲存起來。

o SaveOffset : 當找到匹配項後,從第幾個字元開始儲存到引數中。該屬性不能為負數,預設值為0

o SaveLen :當找到匹配項後,偏移量之後的幾個字元儲存到引數中。預設值是-1,表示一直到結尾的整個字串都存入引數。

三、例項解析

1

如圖所示,不輸入查詢條件,直接點選【查詢】按鈕。生成的資料提交指令碼如下:

value值為請求的資料總數,該值是動態變化的。為了正確的傳送請求並得到正確的結果,需要對該值進行關聯。

Generation Log中搜索“totalItem”,如圖所示,從而可以確定該value值的左右邊界。

在指令碼的請求前插入web_reg_save_param方法,並在提交資料請求的時候使用{count}來替代錄制時實際的值。如下圖:

開啟擴充套件日誌,執行指令碼,可以看到正確的關聯出了結果。

2

上面例項是使用web_reg_save_paramORD=1,只是取第1次出現的左邊界子串的匹配項為需要的內容,下面例子使用web_reg_save_paramORD=ALL,將匹配到的內容儲存到陣列中。

根據訊息列表中的記錄數來進行關聯(只是為了演示,分頁不考慮),跟蹤Generation Log可以看到,一條記錄的內容會包含5列內容。如下圖:

從上圖中可以確定其左右邊界,在指令碼的請求前插入web_reg_save_param方法,並在提交資料請求的時候使用arrSize/5來替代錄制時實際的值。如下圖:

其中lr_paramarr_len方法用於取出數字長度,lr_paramarr_idx方法用於取陣列指定下標的值。開啟擴充套件日誌,執行指令碼,可以看到正確的關聯出了結果。