LoadRunner如何建立關聯

關於Loadrunner關聯
一、什麼時候需要關聯
1.關聯的含義
關聯(correlation):在腳本回放過程中,客戶端發出請求,通過關聯函數所定義的左右邊界值(也就是關聯規則),在服務器所響應的內容中查找,得到相應的值,已變量的形式替換錄製時的靜態值,從而向服務器發出正確的請求,這種動態獲得服務器響應內容的方法被稱作關聯。
其實關聯也屬於一同特殊的參數化,只是與一般的參數化有些不同
一般的參數化的參數來源於一個文件、一個定義的table、通過sql寫的一個結果集等,但關聯所獲得的參數是服務器響應請求所返回的一個符合條件的、動態的值
2.什麼時候需要做關聯
要想弄清這個問題,我們首先要知道客戶端與服務器端的請求與響應的過程
過程說明:
客戶端發出獲得登錄頁面的請求
服務器端得到該請求後,返回登錄頁面,同時動態生成一個Session Id
用戶輸入用戶名密碼,請求登錄時,該Session Id同時被髮送到服務器端
如果該Session Id在當前會話中有效,那麼返回登錄成功的頁面,如果不正確則登錄失敗
在第一次錄製過程中loadrunner把這個值記錄了下來,寫到了腳本中,但再次回放時,客戶端發出同樣的請求,而服務器端再一次動態的生成了Session Id,此時客戶端發出的請求就是錯誤的,爲了獲得這個動態的Session Id我們這裏用到了關聯。
所以我們得出結論:
當客戶端的某個請求是隨着服務器端的相應而動態變化的時候,我們就需要用到關聯
當然我們在錄製腳本時應該對測試項目進行適當的瞭解,知道哪些請求需要用到服務器響應的動態值,如果我們不明確那些值需要做關聯的話,我們也可以將腳本錄製兩遍,通過對比腳本的方法來查找需要關聯的部分,但並不是說兩次錄製的所有不同點都需要關聯,這個要具體情況具體分析

二、自動關聯 loadrunner參數化
自動關聯包含兩種機制:
一種是loadrunner通過對比錄製和回放時服務器響應的不同,而提示用戶是否進行關聯,用戶可自己創建關聯規則,這個功能可以方便的使我們獲得需要關聯的部分,但同時也存在一定的問題,如:自動關聯所檢測到的關聯點不一定真的需要進行關聯,這要我們更具實際情況進行判斷;有些需要關聯的動態數據自動關聯無法找到,這是就需要做手動關聯
另一種是loadrunner自帶的自動關聯規則,在錄製腳本時,會根據這些規則自動創建關聯
自動關聯的步驟如下:
1.開啓自動關聯選項
剛纔提到的兩種關聯機制,如果用戶想使用loadrunner自帶的關聯規則創建關聯,那麼需要在【Recording Options】>【Internet Protocol】>【Correlation】中啓用關聯規則,選中“Enable correlation during recording”,當錄製這些應用系統的腳本時,VuGen會在腳本中自動建立關聯。也可以在【Recording Options】>【Internet Protocol】>【Correlation】中添加關聯規則,達到自動關聯的目的。
如果需要在回放腳本時,loadrunner自動檢測需要關聯的部分,那麼需要在【Tools】>【general options】>【Correlation】中選中“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,當回放玩腳本後,會彈出Scanactionfor correlation窗口,進行關聯點的搜索
2.錄製腳本
錄製腳本的過程在這裏就不多說了
3.回放腳本
如果錄製的腳本存在需要做關聯的部分,那麼在回放腳本時會出現錯誤
4.系統自動彈出檢測關聯對話框,或手動啓動關聯檢測對話框
如果選擇了【Tools】>【general options】>【Correlation】中的“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,那麼在回放腳本後會自動彈出“Scan action for correlation”窗口,點擊“yes”進行自動查找
如果沒有選擇上述設置,那麼也可以按CTRL+F8啓動關聯自動搜索
5.查看系統檢測出的關聯點進行關聯設置
如果在錄製和回放中存在差異,loadrunner會在“Correlation Results”中列出需要做關聯的內容,用鼠標點擊一條需要做關聯的內容,點擊“Create Rule”,系統會顯示獲得當前數據的規則,點擊“yes”,完成規則的創建,同時查看腳本中增加了一個web_reg_save_param函數
也可以點擊【Correlate】按鈕創建關聯,一筆一筆做,或是按下【Correlate All】讓VuGen一次就對所有的數據建立關聯。
注意:由於Correlation Studio會找出所有有變動的數據,但是並不是所有的數據都需要做關聯,所以不建議您直接用【Correlate All】。
6.回放腳本檢查關聯的正確性
創建好關聯後,回放腳本檢查關聯的正確性

三、手動關聯
 手動關聯的過程大致如下:
  第一步:錄製測試腳本,錄製二遍
  第二步:使用WinDiff工具找出兩次腳本的不同,判斷是否需要進行關聯
  第三步:確定插入關聯的位置
  第四步:在VIEW TREE中使用web_reg_save_param函數手動建立關聯
  第五步:將腳本中有用到關聯的數據,用參數代替
  第六步:驗證關聯的正確性
  下面詳細介紹:
  第一步:錄製測試腳本,錄製二遍
  這一步就不用多說了,相同的操作,錄製兩份,分別保存
  第二步:使用WinDiff工具協助找出需要關聯的數據
  1. 在第二份腳本中,點選VuGen的【Tools】>【Compare with Vuser…】,並選擇第一份腳本。
  2. 接着WinDiff會開啓,同時顯示二份腳本,並顯示有差異的地方。WinDiff會以一整行黃色標示有差異的腳本,並且以紅色的字體顯示真正差異的文字。(假如沒看到紅色字體,請點選【Options】>【View】>【Show Inline Differences】)。
  查看二份腳本中差異的部份,每一個差異都可能是需要做關聯的地方。
  注意:lr_thik_time部分的差異可以忽略
  找到不同的部分後,複製,然後打開Recording Log或是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
第三步:確認插入關聯的位置
  我們在日誌中找到了兩次腳本的不同點的位置,根據這個位置,我們再確定是在哪個請求之後產生的,也就是說要定位發生不同點的response是由哪個request產生的,找到了這個請求的函數位置,我們就知道要往哪裏做關聯了。
  一般情況下關聯函數寫到發出請求的函數之前就可以了。
  第四步:插入關聯函數
  在插入關聯函數前,我們先介紹關聯函數web_reg_save_param
  一個web_reg_save_param函數的例子:
web_reg_save_param ("sessionid",
  "LB=Session_id:",
  "RB=;",
  "Search=Body",
  LAST);
  在這裏我們只介紹幾個常用參數的含義
  語法: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。屬性值不分大小寫
  LB( Left Boundary ) : 返回信息的左邊界字串。該屬性必須有,並且區分大小寫。
  RB( Right Boundary ): 返回信息的右邊界字串。該屬性必須有,並且區分大小寫。
  Search : 返回信息的查找範圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質可有可無。
  那麼如何插入該關聯函數呢?
  1.將vugun切換到 view tree 模式下
  2.在左邊的列表中,找到在上一步發出請求的函數,點擊“右鍵”
  選擇“insert before”
  3.在彈出的“add step”對話框的“find function”中輸入“web_reg_save_param”,點擊“ok”
  在“parameter name”中輸入,關聯函數的名稱,這裏最好有含義,“sessionid”
  在“left boundary”中輸入,剛纔記錄下的不同點字符串的左面的幾個字符,定義左邊界,Session_id:
  在“right boundary”中輸入,剛纔記錄下的不同點字符串的右面的幾個字符,定義右邊界,;
  在“search in ”中,選擇“body”
  點擊“ok”
  4.回到腳本編輯模式下,查看該函數插入是否正確
  在發出請求的函數前應該看到:
web_reg_save_param ("sessionid",
  "LB=Session_id:",
  "RB=;",
  "Search=Body",
  LAST);
  第五步:將腳本中有用到關聯的數據,用參數代替
  如發出請求的參數如下,那麼將原來服務器返回的動態值使用{ sessionid } 來替換:
web_submit_form("login.php_2",
  "Snapshot=t2.inf",
  ITEMDATA,
  "Name=login", "Value=wangjin", ENDITEM,
  "Name=password", "Value=wangjin", ENDITEM,
  "Name=Session_id","Value={ sessionid } ", ENDITEM,
  "Name=Submit", "Value=Login", ENDITEM,
  EXTRARES,
  "URL=/media/images/border_bg_l.gif", ENDITEM,
  "URL=/media/images/header_bg.gif", ENDITEM,
  "URL=/media/images/th.gif", ENDITEM,
  LAST);
  第六步:驗證關聯的正確性
  回放腳本,驗證關聯的正確性。
  OK!!!
  大功告成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章