戀戀冬季

          有你的冬天很溫暖

          如何在 Load Runner 腳本中做關(guān)聯(lián) (Correlation)

          如何在 Load Runner 腳本中做關(guān)聯(lián) (Correlation)

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

          所以紀(jì)錄在腳本中要跟服務(wù)器所說(shuō)的話(huà),完全與當(dāng)初錄制時(shí)所說(shuō)的一樣,是寫(xiě)死的(hard-coded)。這樣的作法在遇到有些比較聰明的服務(wù)器時(shí),還是會(huì)失效。這時(shí)就需要透過(guò)「關(guān)聯(lián)(correlation)」的做法來(lái)讓VuGen可以再次成功地騙過(guò)服務(wù)器。

          何謂關(guān)聯(lián)(correlation)?

          所謂的關(guān)聯(lián)(correlation)就是把腳本中某些寫(xiě)死的(hard-coded)數(shù)據(jù),轉(zhuǎn)變成是擷取自服務(wù)器所送的、動(dòng)態(tài)的、每次都不一樣的數(shù)據(jù)。

          舉一個(gè)常見(jiàn)的例子,剛剛提到有些比較聰明的服務(wù)器,這些服務(wù)器在每個(gè)瀏覽器第一次跟它要數(shù)據(jù)時(shí),都會(huì)在數(shù)據(jù)中夾帶一個(gè)唯一的辨識(shí)碼,接下來(lái)就會(huì)利用這個(gè)辨識(shí)碼來(lái)辨識(shí)跟它要數(shù)據(jù)的是不是同一個(gè)瀏覽器。一般稱(chēng)這個(gè)辨識(shí)碼為Session ID。對(duì)于每個(gè)新的交易,服務(wù)器都會(huì)產(chǎn)生新的Session ID給瀏覽器。這也就是為什么執(zhí)行腳本會(huì)失敗的原因,因?yàn)?span lang="EN-US">VuGen還是用舊的Session ID向服務(wù)器要數(shù)據(jù),服務(wù)器會(huì)發(fā)現(xiàn)這個(gè)Session ID是失效的或是它根本不認(rèn)識(shí)這個(gè)Session ID,當(dāng)然就不會(huì)傳送正確的網(wǎng)頁(yè)數(shù)據(jù)給VuGen了。

          下面的圖示說(shuō)明了這樣的情形:

          當(dāng)錄制腳本時(shí),瀏覽器送出網(wǎng)頁(yè)A的請(qǐng)求,服務(wù)器將網(wǎng)頁(yè)A的內(nèi)容傳送給瀏覽器,并且?jiàn)A帶了一個(gè)ID=123的數(shù)據(jù),當(dāng)瀏覽器再送出網(wǎng)頁(yè)B的請(qǐng)求時(shí),這時(shí)就要用到ID=123的數(shù)據(jù),服務(wù)器才會(huì)認(rèn)為這是合法的請(qǐng)求,并且把網(wǎng)頁(yè)B的內(nèi)容送回給瀏覽器。

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

          哪些錯(cuò)誤代表著我應(yīng)該做關(guān)聯(lián)(correlation)?

          假如腳本需要關(guān)聯(lián)( correlation ),在還沒(méi)做之前是不會(huì)執(zhí)行通過(guò)的,也就是說(shuō)會(huì)有錯(cuò)誤訊息發(fā)生。不過(guò),很不幸地,并沒(méi)有任何特定的錯(cuò)誤訊息是和關(guān)聯(lián)( correlation )有關(guān)系的。會(huì)出現(xiàn)什么錯(cuò)誤訊息,與系統(tǒng)實(shí)做的錯(cuò)誤處理機(jī)制有關(guān)。錯(cuò)誤訊息有可能會(huì)提醒您要重新登入,但是也有可能直接就顯示 HTTP 404 的錯(cuò)誤訊息。

          要如何做關(guān)聯(lián)(correlation)?

          關(guān)聯(lián)(correlation)函數(shù)

          關(guān)聯(lián)(correlation)會(huì)用到下列的函數(shù):

          • web_reg_save_param :這是最新版,也是最常用來(lái)做關(guān)聯(lián)(correlation)的函數(shù)。
            語(yǔ)法:
            web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST );
          • web_create_html_param 、web_create_html_param_ex:這二個(gè)函數(shù)主要是保留作為向前兼容的目的的。建議使用 web_reg_save_param 函數(shù)。
          詳細(xì)用法請(qǐng)參考使用手冊(cè)。在VuGen中點(diǎn)選【Help>Function reference>Contexts>Web and Wireless Vuser Functions>Correlation Functions】。

          如何找出要關(guān)聯(lián)(correlation)數(shù)據(jù)

          簡(jiǎn)單的說(shuō),每一次執(zhí)行時(shí)都會(huì)變動(dòng)的值,就有可能需要做關(guān)聯(lián)(correlation)。

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

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

          <!--[if !supportLists]--> 1.????? <!--[endif]--> 自動(dòng)關(guān)聯(lián)

          ???? 2.? 手動(dòng)關(guān)聯(lián)

          自動(dòng)關(guān)聯(lián)

          VuGen 內(nèi)建自動(dòng)關(guān)聯(lián)引擎(auto-correlation engine),可以自動(dòng)找出需要關(guān)聯(lián)的值,并且自動(dòng)使用關(guān)聯(lián)函數(shù)建立關(guān)聯(lián)。

          自動(dòng)關(guān)聯(lián)提供下列二種機(jī)制:

          • Rules Correlation :在錄制過(guò)程中VuGen會(huì)根據(jù)訂定的規(guī)則,實(shí)時(shí)自動(dòng)找出要關(guān)聯(lián)的值。規(guī)則來(lái)源有兩種:
            • 內(nèi)建(Built-in Correlation
              VuGen
              已經(jīng)針對(duì)常用的一些應(yīng)用系統(tǒng),如AribaBuyer、BlueMartini、BroadVision、InterStagemySAPNetDynamicsOraclePeopleSoft、Siebel、SilverJRunner等,內(nèi)建關(guān)聯(lián)規(guī)則,這些應(yīng)用系統(tǒng)可能會(huì)有一種以上的關(guān)聯(lián)規(guī)則。您可以在【Recording Options>Internet Protocol>Correlation】中啟用關(guān)聯(lián)規(guī)則,則當(dāng)錄制這些應(yīng)用系統(tǒng)的腳本時(shí),VuGen會(huì)在腳本中自動(dòng)建立關(guān)聯(lián)。
              您也可以在【Recording Options>Internet Protocol>Correlation】檢視每個(gè)關(guān)聯(lián)規(guī)則的定義。
            • 使用者自訂(User-defined Rules Correlation
              除了內(nèi)建的關(guān)聯(lián)規(guī)則之外,使用者也可以自訂關(guān)聯(lián)規(guī)則。您可以在【Recording Options>Internet Protocol>Correlation】建立新的關(guān)聯(lián)規(guī)則。
          • Correlation Studio :有別于Rules CorrelationCorrelation Studio則是在執(zhí)行腳本后才會(huì)建立關(guān)聯(lián),也就是說(shuō)當(dāng)錄制完腳本后,腳本至少須被執(zhí)行過(guò)一次,Correlation Studio才會(huì)作用。Correlation Studio會(huì)嘗試找出錄制時(shí)與執(zhí)行時(shí),服務(wù)器響應(yīng)內(nèi)容的差異部分,藉以找出需要關(guān)聯(lián)的數(shù)據(jù),并建立關(guān)聯(lián)。

          Rule Correlation

          請(qǐng)依照以下步驟使用Rule Correlation

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

          <!--[if !supportLists]--> 1.????? <!--[endif]--> 點(diǎn)選VuGen的【Tools>Recording Options】,開(kāi)啟【Recording Options】對(duì)話(huà)窗口,選取【Internet Protocol>Correlation】,勾選【Enable correlation during recording】,以啟用自動(dòng)關(guān)聯(lián)。

          <!--[if !supportLists]--> 2.????? <!--[endif]--> 假如錄制的應(yīng)用系統(tǒng)屬于內(nèi)建關(guān)聯(lián)規(guī)則的系統(tǒng),如AribaBuyerBlueMartini、BroadVision、InterStage、mySAPNetDynamics、Oracle、PeopleSoftSiebel、SilverJRunner等,請(qǐng)勾選相對(duì)應(yīng)的應(yīng)用系統(tǒng)。

          <!--[if !supportLists]--> 3.????? <!--[endif]--> 或者也可以針對(duì)錄制的應(yīng)用系統(tǒng)加入新的關(guān)聯(lián)規(guī)則,此即為使用者自訂的關(guān)聯(lián)規(guī)則。

          <!--[if !supportLists]--> 4.????? <!--[endif]--> 設(shè)定當(dāng)VuGen偵測(cè)到符合關(guān)聯(lián)規(guī)則的數(shù)據(jù)時(shí),要如何處理:

          <!--[if !supportLists]--> ? ??????? <!--[endif]--> Issue a pop-up message and let me decide online】:跳出一個(gè)訊息對(duì)話(huà)窗口,詢(xún)問(wèn)您是否要建立關(guān)聯(lián)。

          ????????????????? Perform correlation in sceipt】:直接自動(dòng)建立關(guān)聯(lián)
          ? ? 2.? 錄制腳本
          ???????????
          開(kāi)始錄制腳本,在錄制過(guò)程中,當(dāng)VuGen偵測(cè)到符合關(guān)聯(lián)規(guī)則的數(shù)據(jù)時(shí),會(huì)依照設(shè)定建立關(guān)聯(lián),您會(huì)在腳本中看到類(lèi)似以下的腳??????????? 本,此為BroadVision應(yīng)用系統(tǒng)建立關(guān)聯(lián)的例子,在腳本批注部分可以看到關(guān)聯(lián)前的數(shù)據(jù)為何。
          圖像-0017.png

          ????? 3.? 執(zhí)行腳本驗(yàn)證關(guān)聯(lián)是OK的。

          Correlation Studio

          當(dāng)錄制的應(yīng)用系統(tǒng)不屬于VuGen預(yù)設(shè)支持的應(yīng)用系統(tǒng)時(shí),Rule Correlation可能既無(wú)法發(fā)揮作用,這時(shí)可以利用Correlation Studio來(lái)做關(guān)聯(lián)。

          Correlation Studio會(huì)嘗試找出錄制時(shí)與執(zhí)行時(shí),服務(wù)器響應(yīng)內(nèi)容的差異部分,藉以找出需要關(guān)聯(lián)的數(shù)據(jù),并建立關(guān)聯(lián)。

          使用Correlation Studio的步驟如下:

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

          ?? 2.? 執(zhí)行完畢后,VuGen會(huì)跳出下面的【Scan Action for Correlation】窗口,詢(xún)問(wèn)您是否要掃描腳本并建立關(guān)聯(lián),按下【Yes】按鈕。

          圖像-0018.png

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

          Part2

          手動(dòng)關(guān)聯(lián)

          手動(dòng)關(guān)聯(lián)的執(zhí)行過(guò)程大致如下:

          <!--[if !supportLists]-->1.????? <!--[endif]-->使用相同的業(yè)務(wù)流程與數(shù)據(jù),錄制二份腳本

          <!--[if !supportLists]-->2.????? <!--[endif]-->使用WinDiff工具協(xié)助找出需要關(guān)聯(lián)的數(shù)據(jù)

          <!--[if !supportLists]-->3.????? <!--[endif]-->使用web_reg_save_param函數(shù)手動(dòng)建立關(guān)聯(lián)

          <!--[if !supportLists]-->4.????? <!--[endif]-->將腳本中有用到關(guān)聯(lián)的數(shù)據(jù),以參數(shù)取代

          接下來(lái)將詳細(xì)的說(shuō)明如何執(zhí)行每個(gè)步驟

          使用相同的業(yè)務(wù)流程與數(shù)據(jù),錄制二份腳本

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

          <!--[if !supportLists]-->?? 2.????? <!--[endif]-->依照相同的操作步驟與數(shù)據(jù)錄制第二份腳本并存盤(pán)。注意,所有的步驟和輸入的數(shù)據(jù)一定都要一樣,這樣才能找出由服務(wù)器端產(chǎn)生的動(dòng)態(tài)數(shù)據(jù)。

          有時(shí)候會(huì)遇到真的無(wú)法使用相同的輸入數(shù)據(jù),那您也要記住您使用的輸入數(shù)據(jù),到時(shí)才能判斷是您輸入的數(shù)據(jù),還是變動(dòng)的數(shù)據(jù)。?

          使用WinDiff工具協(xié)助找出需要關(guān)聯(lián)的數(shù)據(jù)

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

          <!--[if !supportLists]-->2.????? <!--[endif]-->接著WinDiff會(huì)開(kāi)啟,同時(shí)顯示二份腳本,并顯示有差異的地方。WinDiff會(huì)以一整行黃色標(biāo)示有差異的腳本,并且以紅色的字體顯示真正差異的文字。(假如沒(méi)看到紅色字體,請(qǐng)點(diǎn)選【Options>View>Show Inline Differences】)。

          ????? 3.? 逐一檢視二份腳本中差異的部份,每一個(gè)差異都可能是需要做關(guān)聯(lián)的地方。選取差異的腳本,然后復(fù)制。在復(fù)制時(shí),有時(shí)并不需要取整行腳本,可能只會(huì)選取腳本中的一部分。
          注意:請(qǐng)忽略lr_thik_time的差異部份,因?yàn)?span lang="EN-US">lr_thik_time
          是用來(lái)模擬每個(gè)步驟之間使用者思考延遲的時(shí)間。
          圖像-0020.png

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

          <!--[if !supportLists]--><!--[endif]-->結(jié)果會(huì)有二種:

          <!--[if !supportLists]-->1 ???? <!--[endif]-->Recording Log中找不到要找的數(shù)據(jù),這時(shí)請(qǐng)先確認(rèn)您找對(duì)了腳本,畢竟現(xiàn)在開(kāi)啟了二個(gè)幾乎一樣的腳本,很容易弄錯(cuò)。

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

          ? 5.? 現(xiàn)在您已經(jīng)找到錄制二次都不一樣,而且是由服務(wù)器所產(chǎn)生的動(dòng)態(tài)數(shù)據(jù)了,而此數(shù)據(jù)極有可能需要做關(guān)聯(lián)。

          使用web_reg_save_param函數(shù)手動(dòng)建立關(guān)聯(lián)

          在找到是由服務(wù)器所產(chǎn)生的動(dòng)態(tài)數(shù)據(jù)之后,接下來(lái)要做的就是找出適當(dāng)?shù)奈恢?,使?span lang="EN-US">web_reg_save_param函數(shù),將這個(gè)動(dòng)態(tài)數(shù)據(jù)擷取到某個(gè)參數(shù)中。

          1.要在哪里使用web_reg_save_param函數(shù)?
          在之前的步驟,我們已經(jīng)在Execution Log找到可能需要關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù)。在Execution Log中選取動(dòng)態(tài)數(shù)據(jù)前的文字然后復(fù)制,我們將會(huì)利用這段文字,來(lái)幫助我們找出要關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù)。
          圖像-0023.png

          不過(guò)在這之前我們要先找出使用web_reg_save_param函數(shù)的正確位置,所以我們要再重新執(zhí)行一遍腳本,而且這次會(huì)開(kāi)啟所有的Log。

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

          <!--[if !supportLists]-->2.????? <!--[endif]-->點(diǎn)選【General>Log】。

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

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

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

          2.找出web_reg_save_param中要用到的邊界
          web_reg_save_param
          函數(shù)主要是透過(guò)動(dòng)態(tài)數(shù)據(jù)的前面和后面的固定字符串,來(lái)辨識(shí)要擷取的動(dòng)態(tài)數(shù)據(jù)的,所以我們還需要找出動(dòng)態(tài)數(shù)據(jù)的邊界字符串。

          找出左邊界字符串

          再回到Execution Log中,選取動(dòng)態(tài)數(shù)據(jù)前的字符串并且復(fù)制它。
          這時(shí)會(huì)有個(gè)問(wèn)題,到底要選取多少字符串才足以唯一識(shí)別要找的動(dòng)態(tài)數(shù)據(jù)呢?建議是越多越好,但是盡量不要包含到特殊字符。

          在這邊我們選取「input type=hidden name=userSession value=」字符串。選好之后,還要再確認(rèn)一次這段字符串真的是可以唯一識(shí)別的,所以我們?cè)?span lang="EN-US">Execution Log中透過(guò)Ctrl+F的搜尋,找找看這段字符串是否可以找到要找的動(dòng)態(tài)數(shù)據(jù)。假如找不到,web_reg_save_param函數(shù)還有個(gè)ORD參數(shù)可以使用,ORD參數(shù)可以設(shè)定出現(xiàn)在第幾次的字符串才是要找的字符串。

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

          找出右邊界字符串

          接下來(lái)要找出動(dòng)態(tài)數(shù)據(jù)的右邊界字符串,這個(gè)字符串就比較好找了,從動(dòng)態(tài)數(shù)據(jù)的最后一個(gè)字符開(kāi)始,通常就是我們要找的右邊界字符串了。

          以這個(gè)例子來(lái)看,就是「>」,所以再把右邊界字符串加入,web_reg_save_param函數(shù)中,這時(shí)web_reg_save_param函數(shù)已經(jīng)快完成了。最后再加上「LAST);」就完成整個(gè)web_reg_save_param函數(shù)了。

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

          將腳本中有用到關(guān)聯(lián)的數(shù)據(jù),以參數(shù)取代

          當(dāng)使用web_reg_save_param建立參數(shù)后,接下來(lái)就是用“UserSession”參數(shù)去取代腳本中寫(xiě)死的(hard-coded)資料。

          范例:

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

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

          到這里您已經(jīng)完成了一個(gè)關(guān)聯(lián)了,接下來(lái)就是執(zhí)行腳本,是否能成功運(yùn)行,假如還是有問(wèn)題,就要檢查看看是否還需要再做另一個(gè)關(guān)聯(lián)。

          關(guān)于 web_reg_save_param 函數(shù)

          對(duì)于關(guān)聯(lián)(correlation)來(lái)說(shuō),web_reg_save_param是最重要的一個(gè)函數(shù),其功能是在下載的網(wǎng)頁(yè)內(nèi)容中,透過(guò)設(shè)定的邊界字符串,找出特定的數(shù)據(jù)并將其儲(chǔ)存在一個(gè)參數(shù)中,以供后續(xù)腳本使用。

          接下來(lái)將針對(duì)web_reg_save_param做比較詳細(xì)的說(shuō)明。

          Service and registration type function

          web_reg_save_param是一個(gè)Service functionservice function主要是用來(lái)完成一些特殊的工作的,如關(guān)聯(lián)、設(shè)定proxy、提供認(rèn)證信息等,當(dāng)其作用時(shí),不會(huì)對(duì)網(wǎng)頁(yè)的內(nèi)容做任何的修改。

          web_reg_save_param同時(shí)也是一個(gè)registration type function (只要函數(shù)名稱(chēng)中包含_reg_的字眼,表示其為registration type function)registration type function意味著其真正作用的時(shí)機(jī)是在下一個(gè)action function完成時(shí)執(zhí)行的。舉例來(lái)說(shuō),當(dāng)某個(gè)web_url執(zhí)行時(shí)所接收到的網(wǎng)頁(yè)內(nèi)容中包含了要做關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù),則必須將web_reg_save_param放在此web_url之前,則web_reg_save_param會(huì)在web_url執(zhí)行完畢后,也就是網(wǎng)頁(yè)內(nèi)容都下載完后,再執(zhí)行web_reg_save_param找尋要做關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù)并建立參數(shù)。

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

          語(yǔ)法

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

          參數(shù)說(shuō)明

          ParamName:存放動(dòng)態(tài)數(shù)據(jù)的參數(shù)名稱(chēng)

          list of Attributes:其它屬性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。屬性值不分大小寫(xiě),例如 Search=all。以下將詳細(xì)說(shuō)明每個(gè)屬性值的意義:

          • Notfound:指定當(dāng)找不到要找的動(dòng)態(tài)數(shù)據(jù)時(shí)該怎么處置。
            • Notfound=error:當(dāng)找不到動(dòng)態(tài)數(shù)據(jù)時(shí),發(fā)出一個(gè)錯(cuò)誤訊息。假如沒(méi)設(shè)定此屬性,此為LoadRunner的默認(rèn)值。
            • Notfound=warning:當(dāng)找不到動(dòng)態(tài)數(shù)據(jù)時(shí),不發(fā)出錯(cuò)誤訊息,只發(fā)出警告,腳本也會(huì)繼續(xù)執(zhí)行下去不會(huì)中斷。在對(duì)角本除錯(cuò)時(shí),可以使用此屬性值。
          • LB:動(dòng)態(tài)數(shù)據(jù)的左邊界字符串。此屬性質(zhì)是必須要有的,而且區(qū)分大小寫(xiě)。
          • RB:動(dòng)態(tài)數(shù)據(jù)的右邊界字符串。此屬性質(zhì)是必須要有的,而且區(qū)分大小寫(xiě)。
          • RelFrameID:相對(duì)于URL而言,欲搜尋的網(wǎng)頁(yè)的Frame。此屬性質(zhì)可以是All或是數(shù)字,而且可有可無(wú)。
          • Search:搜尋的范圍??梢允?span lang="EN-US">Headers(只搜尋headers)、Body(只搜尋body部分,不搜尋header)、Noresource(只搜尋body部分,不搜尋headerresource)或是All(搜尋全部范圍,此為默認(rèn)值)。此屬性質(zhì)可有可無(wú)。
          • ORD:指明從第幾次出現(xiàn)的左邊界開(kāi)始才是要擷取的數(shù)據(jù)。此屬性質(zhì)可有可無(wú),默認(rèn)值是1。假如值為All,則所有找到符合的數(shù)據(jù)會(huì)儲(chǔ)存在數(shù)組中。
          • SaveOffset:當(dāng)找到符合的動(dòng)態(tài)數(shù)據(jù)時(shí),從第幾個(gè)字符開(kāi)始才開(kāi)始儲(chǔ)存到參數(shù)中。此屬性質(zhì)不可為負(fù)數(shù),其默認(rèn)值為0。
          • Convert:可能的值有二種:
            • HTML_TO_URL: HTML-encoded數(shù)據(jù)轉(zhuǎn)成URL-encoded數(shù)據(jù)格式
            • HTML_TO_TEXT:HTML-encoded數(shù)據(jù)轉(zhuǎn)成純文字?jǐn)?shù)據(jù)格式
          SaveLen:offect開(kāi)始算起,到指定的長(zhǎng)度內(nèi)的字符串,才儲(chǔ)存到參數(shù)中。此參數(shù)可有可無(wú),默認(rèn)值是-1,表示儲(chǔ)存到結(jié)尾整個(gè)字符串。

          范例

          web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner會(huì)搜尋網(wǎng)頁(yè)中所有以<a href=開(kāi)頭,且以’>」結(jié)束,當(dāng)中包含的字符串,并且儲(chǔ)存在「A」參數(shù)中。

          Tips and Tricks

          以下提供一些關(guān)聯(lián)的常見(jiàn)問(wèn)題:

          • 如何打印出參數(shù)值?
            lr_output_message
            這二個(gè)函數(shù)來(lái)做到。例如:

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

          lr_eval_stringlr_output_message函數(shù)的使用說(shuō)明請(qǐng)參考LoadRunner Online Function Reference。

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

          如何手動(dòng)啟動(dòng)「Scan action for correlation」的功能
          要手動(dòng)啟動(dòng)「Scan action for correlation」的功能,請(qǐng)先執(zhí)行腳本一次后,點(diǎn)選【Vuser>Scan Action for Correlation】。
          圖像-0028.png


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

          posted on 2006-08-02 10:58 戀戀冬季 閱讀(4161) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): LoadRunner

          評(píng)論

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

          不錯(cuò),圖文并茂,很容易懂,謝謝樓主  回復(fù)  更多評(píng)論   

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

          不錯(cuò),圖文并茂,很容易懂,謝謝樓主
          我最近也在學(xué)這個(gè),是基于Oracle的
          能否加我MSN:tangxln@hotmail.com  回復(fù)  更多評(píng)論   

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

          樓主寫(xiě)的太好了,非常有幫助!謝謝!  回復(fù)  更多評(píng)論   

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

          我這里出現(xiàn)“執(zhí)行完腳本后并未出現(xiàn)【Scan Action for Correlation】窗口”的問(wèn)題了,可能我和你lr的版本不同。沒(méi)找到這個(gè)選項(xiàng)啊。。。。
          我的是loadrunner 9.1的。
            回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 扎囊县| 沾化县| 丹棱县| 商城县| 化德县| 乌什县| 宜兴市| 湾仔区| 邯郸市| 罗定市| 凤阳县| 商都县| 台江县| 通城县| 广昌县| 阳曲县| 什邡市| 饶阳县| 福泉市| 永靖县| 盱眙县| 新干县| 桑日县| 湟源县| 兴和县| 孙吴县| 临桂县| 宁明县| 榆中县| 三江| 南投县| 塔城市| 桓仁| 马关县| 岫岩| 保山市| 湖口县| 北票市| 内丘县| 临武县| 铜山县|