Loadrunner關聯原理及方法


建議先通讀一遍文檔再根據文檔進行實際操作選擇你認為最喜歡的方法進行關聯

關聯原理

loadrunner添加session_服務器

 

(圖一)

如上圖所示:

腳本錄製時,我們通過登錄獲取的session ID①會被存儲在我們客户端(瀏覽器)本地,下次請求時,我們就會使用session ID①進行訪問。

 

loadrunner添加session_服務器_02

 

(圖二)

但是,如圖二所示,在我們回放腳本時,由於是二次登錄,所以我們的服務器又會產生新的session ID返回給我們,這個時候我們把它標作session ID②。

但是由於腳本里面的sessionID依然是存儲的上次保存的session ID①(但是由於生成了第二次session ID②,所以服務器要的是②,不是①),所以發送給服務器的時候,會提示錯誤的session ID,這樣就造成了我們登錄不上去,後續的業務也就不能進行下去了。

因此,為了解決這些類似session ID的動態值的問題,我們需要在腳本有這種動態值的時候進行相應的關聯。原理就是,當我們發現關聯的參數有新值產生(動態變化時),會將新值賦給參數,在如上圖就是把session ID②的值給到之前的session ID①,這樣就能讓我們在回放時,成功登錄。

 

錄製時userSession=3.4164576868789

回放時userSession=3.4232456789322

 

怎麼設置關聯

設置關聯通常有兩種方式,分別為自動關聯和手動關聯。

a) 自動關聯(loadrunner11):

第一步、自動關聯,需要在錄製選項Recording Options裏將Enable correlation during recording(啓用錄製時關聯)給勾上。

 

loadrunner添加session_右鍵_03

 

第二步、錄製腳本,腳本錄製完以後回放,如果有session值的變化,第一次回放會是失敗的。類似下面兩圖

注意:不管是自動還是手動關聯,需要做關聯都需要先回放

 

loadrunner添加session_loadrunner添加session_04

 

 

第三步、這個時候點擊快捷鍵ctrl+F8彈出如下頁面

 

loadrunner添加session_loadrunner添加session_05

 

然後,如果兩次相應的值有變化,系統會自動用黃色的標記給標識出來,同時,在下方的correlated欄也會顯示出來,然後我們只需要選中相應的值,且點擊右下角的Correlate按鈕,就能夠進行關聯了。

 

loadrunner添加session_數據_06

 

然後關聯以後可以看到,value裏面保存的是這個sessionID原本的值。在腳本里面產生了這樣一個函數web_reg_save_param_ex(),其中ParamName是這個參數的名字,LB=後面的是sessionID的左邊界,RB對應的是右邊界。至此,自動關聯就完成啦。

但是自動關聯有很大的弊端,loadrunner11的自動關聯非常不完善,比如找不到或者説所以很多情況下都需要我們自己來做手動關聯(Loadrunner12的自動關聯使用起來體驗不錯,可以適當減少工作量)。

 

b) 手動關聯:

手動關聯,有好多種方法,這裏只講一種,就是通過兩次錄取腳本來查找其中變化的值,然後根據找到的值進行函數編寫,手動輸入左右邊界值的過程。

步驟:

第一步:錄製測試腳本,錄製兩遍;

第二步:使用WinDiff工具找出兩次腳本的不同,判斷是否需要進行關聯;

第三步:使用web_reg_save_param函數手動建立關聯;

第四步:將腳本中有用到關聯的數據,以參數代替;

第一步、錄製測試腳本,錄製兩遍:

先錄製一份腳本存檔,取名為loginA,再依照相同的操作步驟與數據錄製第二份腳本並保存,取名為loginB並關閉loginB;(兩次錄製的操作步驟及使用數據最好保持一模一樣)。

 

第二步:使用WinDiff工具找出兩次腳本的不同,判斷是否需要進行關聯;

在腳本loginA中,單擊VuGen的菜單tool→compare with vuser...,並選擇loginB,如下圖所示:

 

loadrunner添加session_右鍵_07

loadrunner添加session_右鍵_08

 

 

 

然後就會看到,黃色的部分都是兩個腳本不同的地方(所以儘量要保持腳本一致)。可以看到紅色部分,就是我們兩次的userSession發生了變化。

然後根據選項選擇options->view->Line Numbers和Show Inline Differences,如下圖

 

loadrunner添加session_數據_09

 

結果顯而易見,會把字符變化的部分使用紅色的標記出來,這樣就更方便觀察了。所以最終對比的結果如下所示:

 

loadrunner添加session_右鍵_10

 

第三步:使用web_reg_save_param函數手動建立關聯;

逐一檢查差異部分,每個地方都可能是需要關聯的地方,但是在上圖所示的例子裏,我們只需要關聯的是userSession。

接着打開Recording Log(單一協議)或是Generation Log(多重協議)中找到這個值。可以在Generation Log的開頭部分使用ctrl+f快捷鍵,查找發生變化的值

 

loadrunner添加session_服務器_11

 

經過查找我們發現,userSession是在Response Body For Transcation With Id 25(ID25的回執報文身體部分)這裏回執給客户端的;然後,我們需要找到Id 25所對應的發送請求的路徑。

loadrunner添加session_數據_12

 

如下圖所示,最終找到發送請求的 Request Header For Transaction With Id 25(ID25的請求報頭),它的請求地址是

 

loadrunner添加session_loadrunner添加session_13

 

接下來去腳本里面進行搜索,最終定位,在腳本的下圖部分進行的請求

 

loadrunner添加session_loadrunner添加session_14

 

所以,最終,我們只需要在web_submit_data前面編寫關聯函數就可以了(如果怕有問題,可以寫在腳本最前面)。

第四步:插入關聯函數函數可以如下所示,也可以使用web_reg_save_param()函數,區別在於web_reg_save_param_ex()函數可以使用正則表達式來過濾左右邊界。

web_reg_save_param_ex(

"ParamName=CorrelationParameter_1",

"LB=userSession value=",

"RB=>\n<table border",

SEARCH_FILTERS,

"Scope=All",

"RequestUrl=*/nav.pl*",

LAST);

然後,在腳本里面,使用ParamNmae後面的值 CorrelationParameter_1這個參數把腳本里面的變化值value=122860.759740786zDVQzfApDcQVzzzHDHQVHpQAVQHf替換掉,就會變成

value={ CorrelationParameter_1}。

最後,運行腳本,體驗一下關聯成功以後,腳本是否能夠運行成功!

 

注意還有兩種手動關聯的方式,會比手動寫函數更簡單一點,就是在確認變化的參數之後,在Response body裏面找到變化的值以後,直接採用右鍵關聯的方式進行關聯設置。

其中需要做的設置有其中要進行的設置,包括,啓用Tree模式,點擊HTTP View,設置為Display Recorded Snapshot,然後點擊到Response Body部分。

 

loadrunner添加session_服務器_15

 

接着,找到變化的值,選中它,點擊右鍵->Create Correlation創建聯接

 

loadrunner添加session_數據_16

 

在VGun裏面選擇insert->New Step->Services->web_reg_save_param_ex,然後會出現以下的界面,分別填寫左右邊界和參數名字等關鍵參數,就能夠將關聯做好而不需要手動寫函數了。

 

loadrunner添加session_loadrunner添加session_17

 

Prameter name: 此處設置存放參數的名稱。

Left boundary: 此處設置左邊界,這裏是用來填寫關聯對於數據處理的左匹配內容規則。

Match case :  默認情況下邊界是檢查Match case ,也就是檢查大小寫的。

Binary data : 如果要關聯的內容是非ASCII 字符的,需要選擇此項

Regular expression : 在LR11 中關聯提供了使用正則表達式的功能,但是LR11 Patch3 中取消web_reg_save_param_ex 函數對此功能的設置。

Reight boundary: 此處設置右邊界。

DFEs : 在錄製選項和回放中我們提供了DFE的功能,在關聯這裏也支持DFE的數據處理。 (DFE等後面再解釋,或你自行查資料)

Ordinal :  這個關鍵字在很多函數裏面都有應用,在這裏可以填寫任意一個整數,也可以填All 。如果填寫數字,那麼説明從返回的記錄中取出對應順序的值,而填寫All 的話將會返回所有內容。

Save Offset : 設置關聯的內容偏移量,從第幾位開始進行關聯操作。

Save Length : 關聯出來的內容所需要保存的長度。

Warm if text was not found (Default is Error) : 對於關聯的對象不存在的處理。

 

Filters : 下面的選項都是幫助關聯返回限定的,通過這些設置可以進一步減少返回的範圍。

 

 

最後,介紹幾個解決亂碼問題的方法:

1. 錄製完以後腳本里面有亂碼

解決方案:在VuGen裏面選擇Tools->Recording Options(或者直接CTRL+F7)->Advanced,更改Suppert Charset->UTF-8

注意:該方法只有改了以後再錄才會生效,錄完再改沒有任何效果!

 

loadrunner添加session_服務器_18

 

但是如果設置為UTF-8,頁面反而是GB2312或者其他編碼,這個時候反而會產生亂碼,所以最好是確認頁面是什麼編碼然後進行更改最穩妥

如何查看頁面編碼呢?

  1. 查看頁面源代碼,查看charset(編碼在http response header中的Content-Type)是什麼格式。

 

loadrunner添加session_loadrunner添加session_19

 

b.IE打開頁面後,右鍵->編碼,查看瀏覽器自動選擇的編碼是什麼

 

loadrunner添加session_服務器_20

 

2.腳本回訪時出現亂碼

a. 更改運行時設置:

點擊菜單欄中的Vuser,選擇Run-time Settings(或者直接按F4鍵):

loadrunner添加session_數據_21

 

 

在彈出的窗口左側點擊Internet Protocol->Preferences->Advanced然後在右側窗口中點擊Options按鈕,在彈出的窗體中找到General->Convert from/to UTF-8,將其設為Yes。

 

 

loadrunner添加session_服務器_22