<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    戀戀冬季

    有你的冬天很溫暖

    如何在 Load Runner 腳本中做關聯 (Correlation)

    如何在 Load Runner 腳本中做關聯 (Correlation)

    Part1
    當錄制腳本時,VuGen會攔截client端(瀏覽器)與server端(網站服務器)之間的對話,并且通通記錄下來,產生腳本。在VuGenRecording Log中,您可以找到瀏覽器與服務器之間所有的對話,包含通訊內容、日期、時間、瀏覽器的請求、服務器的響應內容等等。腳本和Recording Log最大的差別在于,腳本只記錄了client端要對server端所說的話,而Recording Log則是完整紀錄二者的對話。
    <!--[if !vml]--> <!--[endif]-->
    圖像-0015.png
    當執行腳本時,您可以把VuGen想象成是一個演員,它偽裝成瀏覽器,然后根據腳本,把當初真的瀏覽器所說過的話,再對網站伺服器重新說一遍,VuGen企圖騙過服務器,讓服務器以為它就是當初的瀏覽器,然后把網站內容傳送給VuGen

    所以紀錄在腳本中要跟服務器所說的話,完全與當初錄制時所說的一樣,是寫死的(hard-coded)。這樣的作法在遇到有些比較聰明的服務器時,還是會失效。這時就需要透過「關聯(correlation)」的做法來讓VuGen可以再次成功地騙過服務器。

    何謂關聯(correlation)?

    所謂的關聯(correlation)就是把腳本中某些寫死的(hard-coded)數據,轉變成是擷取自服務器所送的、動態的、每次都不一樣的數據。

    舉一個常見的例子,剛剛提到有些比較聰明的服務器,這些服務器在每個瀏覽器第一次跟它要數據時,都會在數據中夾帶一個唯一的辨識碼,接下來就會利用這個辨識碼來辨識跟它要數據的是不是同一個瀏覽器。一般稱這個辨識碼為Session ID。對于每個新的交易,服務器都會產生新的Session ID給瀏覽器。這也就是為什么執行腳本會失敗的原因,因為VuGen還是用舊的Session ID向服務器要數據,服務器會發現這個Session ID是失效的或是它根本不認識這個Session ID,當然就不會傳送正確的網頁數據給VuGen了。

    下面的圖示說明了這樣的情形:

    當錄制腳本時,瀏覽器送出網頁A的請求,服務器將網頁A的內容傳送給瀏覽器,并且夾帶了一個ID=123的數據,當瀏覽器再送出網頁B的請求時,這時就要用到ID=123的數據,服務器才會認為這是合法的請求,并且把網頁B的內容送回給瀏覽器。

    在執行腳本時會發生什么狀況?瀏覽器再送出網頁B的請求時,用的還是當初錄制的ID=123的數據,而不是用服務器新給的ID=456,整個腳本的執行就會失敗。
    圖像-0016.png
    要對付這種服務器,我們必須想辦法找出這個Session ID到底是什么、位于何處,然后把它擷取下來,放到某個參數中,并且取代掉腳本中有用到Session ID的部份,這樣就可以成功騙過服務器,正確地完成整個交易了。

    哪些錯誤代表著我應該做關聯(correlation)?

    假如腳本需要關聯( correlation ),在還沒做之前是不會執行通過的,也就是說會有錯誤訊息發生。不過,很不幸地,并沒有任何特定的錯誤訊息是和關聯( correlation )有關系的。會出現什么錯誤訊息,與系統實做的錯誤處理機制有關。錯誤訊息有可能會提醒您要重新登入,但是也有可能直接就顯示 HTTP 404 的錯誤訊息。

    要如何做關聯(correlation)?

    關聯(correlation)函數

    關聯(correlation)會用到下列的函數:

    • web_reg_save_param :這是最新版,也是最常用來做關聯(correlation)的函數。
      語法:
      web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST );
    • web_create_html_param web_create_html_param_ex:這二個函數主要是保留作為向前兼容的目的的。建議使用 web_reg_save_param 函數。
    詳細用法請參考使用手冊。在VuGen中點選【Help>Function reference>Contexts>Web and Wireless Vuser Functions>Correlation Functions】。

    如何找出要關聯(correlation)數據

    簡單的說,每一次執行時都會變動的值,就有可能需要做關聯(correlation)。

    VuGen 提供二種方式幫助您找出需要做關聯(correlation)的值:

    <!--[if !supportLists]-->

    <!--[if !supportLists]--> 1.????? <!--[endif]--> 自動關聯

    ???? 2.? 手動關聯

    自動關聯

    VuGen 內建自動關聯引擎(auto-correlation engine),可以自動找出需要關聯的值,并且自動使用關聯函數建立關聯。

    自動關聯提供下列二種機制:

    • Rules Correlation :在錄制過程中VuGen會根據訂定的規則,實時自動找出要關聯的值。規則來源有兩種:
      • 內建(Built-in Correlation
        VuGen
        已經針對常用的一些應用系統,如AribaBuyerBlueMartiniBroadVisionInterStagemySAPNetDynamicsOraclePeopleSoftSiebelSilverJRunner等,內建關聯規則,這些應用系統可能會有一種以上的關聯規則。您可以在【Recording Options>Internet Protocol>Correlation】中啟用關聯規則,則當錄制這些應用系統的腳本時,VuGen會在腳本中自動建立關聯。
        您也可以在【Recording Options>Internet Protocol>Correlation】檢視每個關聯規則的定義。
      • 使用者自訂(User-defined Rules Correlation
        除了內建的關聯規則之外,使用者也可以自訂關聯規則。您可以在【Recording Options>Internet Protocol>Correlation】建立新的關聯規則。
    • Correlation Studio :有別于Rules CorrelationCorrelation Studio則是在執行腳本后才會建立關聯,也就是說當錄制完腳本后,腳本至少須被執行過一次,Correlation Studio才會作用。Correlation Studio會嘗試找出錄制時與執行時,服務器響應內容的差異部分,藉以找出需要關聯的數據,并建立關聯。

    Rule Correlation

    請依照以下步驟使用Rule Correlation

    <!--[if !supportLists]--> 1.????? <!--[endif]--> 啟用auto-correlation

    <!--[if !supportLists]--> 1.????? <!--[endif]--> 點選VuGen的【Tools>Recording Options】,開啟【Recording Options】對話窗口,選取【Internet Protocol>Correlation】,勾選【Enable correlation during recording】,以啟用自動關聯。

    <!--[if !supportLists]--> 2.????? <!--[endif]--> 假如錄制的應用系統屬于內建關聯規則的系統,如AribaBuyerBlueMartiniBroadVisionInterStagemySAPNetDynamicsOraclePeopleSoftSiebelSilverJRunner等,請勾選相對應的應用系統。

    <!--[if !supportLists]--> 3.????? <!--[endif]--> 或者也可以針對錄制的應用系統加入新的關聯規則,此即為使用者自訂的關聯規則。

    <!--[if !supportLists]--> 4.????? <!--[endif]--> 設定當VuGen偵測到符合關聯規則的數據時,要如何處理:

    <!--[if !supportLists]--> ? ??????? <!--[endif]--> Issue a pop-up message and let me decide online】:跳出一個訊息對話窗口,詢問您是否要建立關聯。

    ????????????????? Perform correlation in sceipt】:直接自動建立關聯
    ? ? 2.? 錄制腳本
    ???????????
    開始錄制腳本,在錄制過程中,當VuGen偵測到符合關聯規則的數據時,會依照設定建立關聯,您會在腳本中看到類似以下的腳??????????? 本,此為BroadVision應用系統建立關聯的例子,在腳本批注部分可以看到關聯前的數據為何。
    圖像-0017.png

    ????? 3.? 執行腳本驗證關聯是OK的。

    Correlation Studio

    當錄制的應用系統不屬于VuGen預設支持的應用系統時,Rule Correlation可能既無法發揮作用,這時可以利用Correlation Studio來做關聯。

    Correlation Studio會嘗試找出錄制時與執行時,服務器響應內容的差異部分,藉以找出需要關聯的數據,并建立關聯。

    使用Correlation Studio的步驟如下:

    <!--[if !supportLists]-->1.????? <!--[endif]-->錄制腳本并執行

    ?? 2.? 執行完畢后,VuGen會跳出下面的【Scan Action for Correlation】窗口,詢問您是否要掃描腳本并建立關聯,按下【Yes】按鈕。

    圖像-0018.png

    ?? 3.? 掃描完后,可以在腳本下方的【Correlation Results】中看到掃描的結果。

    Part2

    手動關聯

    手動關聯的執行過程大致如下:

    <!--[if !supportLists]-->1.????? <!--[endif]-->使用相同的業務流程與數據,錄制二份腳本

    <!--[if !supportLists]-->2.????? <!--[endif]-->使用WinDiff工具協助找出需要關聯的數據

    <!--[if !supportLists]-->3.????? <!--[endif]-->使用web_reg_save_param函數手動建立關聯

    <!--[if !supportLists]-->4.????? <!--[endif]-->將腳本中有用到關聯的數據,以參數取代

    接下來將詳細的說明如何執行每個步驟

    使用相同的業務流程與數據,錄制二份腳本

    <!--[if !supportLists]-->1.????? <!--[endif]-->先錄制一份腳本并存檔。

    <!--[if !supportLists]-->?? 2.????? <!--[endif]-->依照相同的操作步驟與數據錄制第二份腳本并存盤。注意,所有的步驟和輸入的數據一定都要一樣,這樣才能找出由服務器端產生的動態數據。

    有時候會遇到真的無法使用相同的輸入數據,那您也要記住您使用的輸入數據,到時才能判斷是您輸入的數據,還是變動的數據。?

    使用WinDiff工具協助找出需要關聯的數據

    <!--[if !supportLists]-->1.????? <!--[endif]-->在第二份腳本中,點選VuGen的【Tools>Compare with Vuser…】,并選擇第一份腳本。

    <!--[if !supportLists]-->2.????? <!--[endif]-->接著WinDiff會開啟,同時顯示二份腳本,并顯示有差異的地方。WinDiff會以一整行黃色標示有差異的腳本,并且以紅色的字體顯示真正差異的文字。(假如沒看到紅色字體,請點選【Options>View>Show Inline Differences】)。

    ????? 3.? 逐一檢視二份腳本中差異的部份,每一個差異都可能是需要做關聯的地方。選取差異的腳本,然后復制。在復制時,有時并不需要取整行腳本,可能只會選取腳本中的一部分。
    注意:請忽略lr_thik_time的差異部份,因為lr_thik_time是用來模擬每個步驟之間使用者思考延遲的時間。
    圖像-0020.png

    ?? 4.? 接著要在Recording Log(單一protocol)或是Generation Log(多重protocol)中找這個值。將鼠標光標點到Recording Log的第一行開頭,按下Ctrl+F,開啟【Find】窗口,貼上剛剛復制的腳本,找出在Recording Log第一次出現的位置。
    圖像-0021.png

    <!--[if !supportLists]--><!--[endif]-->結果會有二種:

    <!--[if !supportLists]-->1 ???? <!--[endif]-->Recording Log中找不到要找的數據,這時請先確認您找對了腳本,畢竟現在開啟了二個幾乎一樣的腳本,很容易弄錯。

    ?????????? 2? 在Recording Log中找到了要找的數據,這時要確認數據是從服務器端傳送過來的。首先可以先檢查數據的標頭,從標頭的Receiving response可以知道數據是從服務器端傳送到client端的。假如此數據第一次出現是在Sending request中,則表示此數據是由client端產生,不需要做關聯,但是有可能需要做參數化(parameterized)。
    您要找的標頭格式如下:
    *** [tid=b9 Action1 2] Receiving response from host astra.merc-int.com:80 ( 25/11/2002 12:04:00 )
    圖像-0022.png

    ? 5.? 現在您已經找到錄制二次都不一樣,而且是由服務器所產生的動態數據了,而此數據極有可能需要做關聯。

    使用web_reg_save_param函數手動建立關聯

    在找到是由服務器所產生的動態數據之后,接下來要做的就是找出適當的位置,使用web_reg_save_param函數,將這個動態數據擷取到某個參數中。

    1.要在哪里使用web_reg_save_param函數?
    在之前的步驟,我們已經在Execution Log找到可能需要關聯的動態數據。在Execution Log中選取動態數據前的文字然后復制,我們將會利用這段文字,來幫助我們找出要關聯的動態數據。
    圖像-0023.png

    不過在這之前我們要先找出使用web_reg_save_param函數的正確位置,所以我們要再重新執行一遍腳本,而且這次會開啟所有的Log

    <!--[if !supportLists]-->1.????? <!--[endif]-->VuGen中點選【Vuser>Run-Time Settings】。

    <!--[if !supportLists]-->2.????? <!--[endif]-->點選【General>Log】。

    <!--[if !supportLists]-->3.????? <!--[endif]-->勾選【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有選項。

    <!--[if !supportLists]-->4.????? <!--[endif]-->按下【OK】就可以執行腳本了。

    執行完腳本之后,在Execution Log中搜尋剛剛復制的字符串。找到字符串后,在字符串前面會有A.tion1.c(7),這個7就是到時候要插入web_reg_save_param函數的位置,也就是要插入到腳本的第7行。
    在腳本的第7行前插入一行空白行,然后輸入
    web_reg_save_param(“UserSession”,
    “UserSession”
    這個 “UserSession” 就是到時要使用的參數名稱,建議給個有意義的名字。
    注意:到這里整個web_reg_save_param函數還沒完成。
    圖像-0024.png

    2.找出web_reg_save_param中要用到的邊界
    web_reg_save_param
    函數主要是透過動態數據的前面和后面的固定字符串,來辨識要擷取的動態數據的,所以我們還需要找出動態數據的邊界字符串。

    找出左邊界字符串

    再回到Execution Log中,選取動態數據前的字符串并且復制它。
    這時會有個問題,到底要選取多少字符串才足以唯一識別要找的動態數據呢?建議是越多越好,但是盡量不要包含到特殊字符。

    在這邊我們選取「input type=hidden name=userSession value=」字符串。選好之后,還要再確認一次這段字符串真的是可以唯一識別的,所以我們在Execution Log中透過Ctrl+F的搜尋,找找看這段字符串是否可以找到要找的動態數據。假如找不到,web_reg_save_param函數還有個ORD參數可以使用,ORD參數可以設定出現在第幾次的字符串才是要找的字符串。

    將這個邊界字符串加到未完成的web_reg_save_param函數中:
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,

    找出右邊界字符串

    接下來要找出動態數據的右邊界字符串,這個字符串就比較好找了,從動態數據的最后一個字符開始,通常就是我們要找的右邊界字符串了。

    以這個例子來看,就是「>」,所以再把右邊界字符串加入,web_reg_save_param函數中,這時web_reg_save_param函數已經快完成了。最后再加上「LAST);」就完成整個web_reg_save_param函數了。

    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=>”, LAST);
    圖像-0025.png

    將腳本中有用到關聯的數據,以參數取代

    當使用web_reg_save_param建立參數后,接下來就是用“UserSession”參數去取代腳本中寫死的(hard-coded)資料。

    范例:

    “Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM,

    換成
    “Name=userSession”, “Value={UserSession}”, ENDITEM,
    圖像-0026.png

    到這里您已經完成了一個關聯了,接下來就是執行腳本,是否能成功運行,假如還是有問題,就要檢查看看是否還需要再做另一個關聯。

    關于 web_reg_save_param 函數

    對于關聯(correlation)來說,web_reg_save_param是最重要的一個函數,其功能是在下載的網頁內容中,透過設定的邊界字符串,找出特定的數據并將其儲存在一個參數中,以供后續腳本使用。

    接下來將針對web_reg_save_param做比較詳細的說明。

    Service and registration type function

    web_reg_save_param是一個Service functionservice function主要是用來完成一些特殊的工作的,如關聯、設定proxy、提供認證信息等,當其作用時,不會對網頁的內容做任何的修改。

    web_reg_save_param同時也是一個registration type function (只要函數名稱中包含_reg_的字眼,表示其為registration type function)registration type function意味著其真正作用的時機是在下一個action function完成時執行的。舉例來說,當某個web_url執行時所接收到的網頁內容中包含了要做關聯的動態數據,則必須將web_reg_save_param放在此web_url之前,則web_reg_save_param會在web_url執行完畢后,也就是網頁內容都下載完后,再執行web_reg_save_param找尋要做關聯的動態數據并建立參數。

    所以要記住一點,要使用registration type function時,要注意其放置的位置必須在要作用的action function之前。

    語法

    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。屬性值不分大小寫,例如 Search=all。以下將詳細說明每個屬性值的意義:

    • Notfound:指定當找不到要找的動態數據時該怎么處置。
      • Notfound=error:當找不到動態數據時,發出一個錯誤訊息。假如沒設定此屬性,此為LoadRunner的默認值。
      • Notfound=warning:當找不到動態數據時,不發出錯誤訊息,只發出警告,腳本也會繼續執行下去不會中斷。在對角本除錯時,可以使用此屬性值。
    • LB:動態數據的左邊界字符串。此屬性質是必須要有的,而且區分大小寫。
    • RB:動態數據的右邊界字符串。此屬性質是必須要有的,而且區分大小寫。
    • RelFrameID:相對于URL而言,欲搜尋的網頁的Frame。此屬性質可以是All或是數字,而且可有可無。
    • Search:搜尋的范圍。可以是Headers(只搜尋headers)Body(只搜尋body部分,不搜尋header)Noresource(只搜尋body部分,不搜尋headerresource)或是All(搜尋全部范圍,此為默認值)。此屬性質可有可無。
    • ORD:指明從第幾次出現的左邊界開始才是要擷取的數據。此屬性質可有可無,默認值是1。假如值為All,則所有找到符合的數據會儲存在數組中。
    • SaveOffset:當找到符合的動態數據時,從第幾個字符開始才開始儲存到參數中。此屬性質不可為負數,其默認值為0
    • Convert:可能的值有二種:
      • HTML_TO_URL: HTML-encoded數據轉成URL-encoded數據格式
      • HTML_TO_TEXT:HTML-encoded數據轉成純文字數據格式
    SaveLen:offect開始算起,到指定的長度內的字符串,才儲存到參數中。此參數可有可無,默認值是-1,表示儲存到結尾整個字符串。

    范例

    web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner會搜尋網頁中所有以<a href=開頭,且以’>」結束,當中包含的字符串,并且儲存在「A」參數中。

    Tips and Tricks

    以下提供一些關聯的常見問題:

    • 如何打印出參數值?
      lr_output_message
      這二個函數來做到。例如:

    lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));

    lr_eval_stringlr_output_message函數的使用說明請參考LoadRunner Online Function Reference

    • 在腳本的data目錄下找不到路制時的快照(snapshot
      造成在腳本的data目錄下找不到路制時的快照(snapshot)的可能原因如下:
      • 腳本是由VuGen 6.02或更早的版本所錄制的
      • 匯入的Action不會包含快照(snapshot)的檔案
      • 腳本是儲存在只讀的目錄下,早成VuGen無法儲存執行時擷取的快照(snapshot
      • 某些步驟并不會產生快照(snapshot),如瀏覽某個資源
      • 快照(snapshot)功能被取消
        Tools>General options>Correlationtab >Save correlation information during replay
    • 開啟WinDiff時出現「File no longer available」的錯誤訊息
      WinDiff
      這個工具有些限制,無法開啟包含空格符的目錄或是腳本,所以建議命名時不要使用空格符,并且盡可能將名稱取短一點。
    錄制時突然跳出【Correlation warning】對話窗口
    當你有勾選自動關聯的【Issue a popup message and let me decide online】選項,當VuGen發現有可能要做關聯的數據時,就會跳出【Correlation warning】的窗口,詢問你要做關聯(Correlation in script)還是要忽略(Ignore)。
    另外你也可以勾選【Perform correlation in script】,讓VuGen自動作關聯,不會再跳出詢問窗口。
    或是勾選【Disable correlation engine】,關閉自動關聯的功能。
    圖像-0027.png

    如何手動啟動「Scan action for correlation」的功能
    要手動啟動「Scan action for correlation」的功能,請先執行腳本一次后,點選【Vuser>Scan Action for Correlation】。
    圖像-0028.png


    執行完腳本后并未出現【Scan Action for Correlation】窗口
    要啟用【Scan Action for Correlation】功能,請點選【Tools>General options>Correlationtab,勾選【Show Scan for correlation popup after replay of Vuser】選項。
    圖像-0029.png

    posted on 2006-08-02 10:58 戀戀冬季 閱讀(4159) 評論(4)  編輯  收藏 所屬分類: LoadRunner

    評論

    # re: 如何在 Load Runner 腳本中做關聯 (Correlation) 2006-12-19 14:46 RedWolf

    不錯,圖文并茂,很容易懂,謝謝樓主  回復  更多評論   

    # re: 如何在 Load Runner 腳本中做關聯 (Correlation) 2007-12-11 12:14 tangxln

    不錯,圖文并茂,很容易懂,謝謝樓主
    我最近也在學這個,是基于Oracle的
    能否加我MSN:tangxln@hotmail.com  回復  更多評論   

    # re: 如何在 Load Runner 腳本中做關聯 (Correlation) 2008-01-11 16:17 lerry

    樓主寫的太好了,非常有幫助!謝謝!  回復  更多評論   

    # re: 如何在 Load Runner 腳本中做關聯 (Correlation) 2008-06-18 18:21 rt

    我這里出現“執行完腳本后并未出現【Scan Action for Correlation】窗口”的問題了,可能我和你lr的版本不同。沒找到這個選項啊。。。。
    我的是loadrunner 9.1的。
      回復  更多評論   

    主站蜘蛛池模板: 亚洲成人免费电影| 精品视频免费在线| 国产一级高清视频免费看| 无码人妻一区二区三区免费视频| 亚洲欧洲日产国码av系列天堂| 日本最新免费网站| 男女猛烈激情xx00免费视频| 亚洲AV永久精品爱情岛论坛 | 四虎影在线永久免费四虎地址8848aa | 亚洲欧美综合精品成人导航| 亚洲精品tv久久久久久久久久| 日韩免费的视频在线观看香蕉| 中文字幕无码精品亚洲资源网久久 | 免费无码婬片aaa直播表情| 亚洲AV人人澡人人爽人人夜夜| 无码人妻久久一区二区三区免费丨| 亚洲AV色欲色欲WWW| 亚洲AV永久精品爱情岛论坛| 日本大片在线看黄a∨免费| 中文字幕乱码一区二区免费| 亚洲AV永久无码精品网站在线观看| 亚洲精品成人网站在线观看| 日韩高清免费观看| 久久A级毛片免费观看| 黄色一级视频免费观看| 亚洲熟妇无码久久精品| 亚洲中文字幕无码一区二区三区| 最新中文字幕电影免费观看| 久久免费区一区二区三波多野| 精品国产日韩亚洲一区91| 亚洲黄色在线观看| 亚洲区小说区激情区图片区| 国产精品免费小视频| 国产免费不卡视频| 免费av片在线观看网站| 四虎永久在线精品免费一区二区| 亚洲一区中文字幕在线电影网| 久久亚洲高清观看| 中文字幕亚洲日韩无线码| 国产高清免费观看| 毛片a级毛片免费播放下载|