loadrunner關聯及web_reg_save_param方法淺析

轉載於:http://www.cnblogs.com/Automation_software/ 

一、什麼是關聯

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

二、web_reg_save_param函數說明

語法:

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

函數說明:

web_reg_save_param是註冊型函數。註冊請求找到並保存在服務器響應一個文本字符串。在執行請求後可以獲取到參數值,如web_url、web_link、web_image、web_submit_data、web_submit_form、web_custom_request。註冊函數需放在各類請求之前

參數說明:

1. ParamName: 存放得到的動態內容的參數名稱。

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

1) Notfound: 當在返回信息中找不到要找的內容時應該怎麼處理

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

    Notfound=warning: 當在返回信息中找不到要找的內容時,只發出警告,腳本也會繼續執行下去不會中斷。

2) LB( LeftBoundary ) : 返回信息的左邊界字串。該屬性必須有,並且區分大小寫

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

4) RelFrameID: 相對於URL而言,欲查找的網頁的Frame。此屬性質可以是All或是數字,該屬性可有可無。

5)Search : 返回信息的查找範圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質可有可無。

6)ORD : 說明第幾次出現的左邊界子串的匹配項纔是需要的內容。

該屬性可有可無,缺省值是1。如爲All,則將所有找到的內容儲存起來,放到數組中

7)SaveOffset : 當找到匹配項後,從第幾個字元開始存儲到參數中。

該屬性不能爲負數,缺省值爲0。

8)SaveLen :當找到匹配項後,偏移量之後的幾個字元存儲到參數中。

缺省值是-1,表示一直到結尾的整個字串都存入參數。


三、如何讀取獲取的動態值

1)輸出到日誌中

char * dynamicparam;

dynamicparam=lr_eval_string("{paramname}");

lr_output_message("the dynamic parameter is %s",dynamicparam);

2)在腳本中使用注意花括號


四、實例解析

例1:

1

如圖所示,不輸入查詢條件,直接點擊【查詢】按鈕。生成的數據提交腳本如下:

2

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

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

3

在腳本的請求前插入web_reg_save_param方法,並在提交數據請求的時候使用{count}來替代錄制時實際的值。如下圖:

4

打開擴展日誌,運行腳本,可以看到正確的關聯出了結果。

5

例2:

上面實例是使用web_reg_save_param的ORD=1,只是取第1次出現的左邊界子串的匹配項爲需要的內容,下面例子使用web_reg_save_param的ORD=ALL,將匹配到的內容保存到數組中。

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

6

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

7

其中lr_paramarr_len方法用於取出數字長度,lr_paramarr_idx方法用於取數組指定下標的值。打開擴展日誌,運行腳本,可以看到正確的關聯出了結果。

8


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