1. 程式人生 > >Loadrunner關聯原理及方法

Loadrunner關聯原理及方法

 

Loadrunner關聯原理及方法

 

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

關聯原理

 

(圖一)

如上圖所示

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

 

 

圖二

但是如圖二所示在我們回放指令碼時由於是二次登入所以我們的伺服器又會產生新的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(啟用錄製時關聯)給勾上

 

 

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

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

 

 

 

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

 

 

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

 

 

然後關聯以後可以看到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的選單toolcompare with vuser...,並選擇loginB,如下圖所示:

 

 

 

 

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

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

 

 

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

 

 

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

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

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

 

 

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

 

如下圖所示,最終找到傳送請求的 Request Header For Transaction With Id 25(ID25的請求報頭),它的請求地址是 “/webTours/nav.pl?in=home”;

 

 

接下來去腳本里面進行搜尋最終定位在指令碼的下圖部分進行的請求

 

 

所以,最終,我們只需要在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部分

 

 

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

 

 

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

 

 

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

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

 

 

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

如何檢視頁面編碼呢

  1. 檢視頁面原始碼檢視charset(編碼在http response header中的Content-Type)是什麼格式。

 

 

bIE開啟頁面後,右鍵->編碼檢視瀏覽器自動選擇的編碼是什麼

 

 

2.腳本回訪時出現亂碼

a. 更改執行時設定:

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

 

 

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