1. 程式人生 > >細說LoadRunner引數化(轉)

細說LoadRunner引數化(轉)

前言:為什麼這裡說是細說LoadRunner引數化,在書和網上到處都能找到關於LoadRunner引數化的內容,但是細心的讀者不能難發現,雖然現在很多資料都有關於引數化的內容,但寫的都不夠詳細,對於初學者來說是一件很困難的事,而引數化又是編輯指令碼最重要的一部分之一,沒有學好引數化就不能算是一名合格的效能測試工程師,因此,在這裡我將自己理解的關於引數化的內容寫出來和初學者共享,希望這份資料對大家學好引數化部分的知識有幫助。

首先:為什麼要對指令碼進行引數化

a)         為了減少指令碼的大小和指令碼數量,藉助引數化我們可以減少指令碼的數量,如果不進行引數化我們為了達到目標可能要拷貝並修改很多個指令碼。

b)        使業務更接近其實的客戶的業務,每個虛擬使用者使用不同引數值來模擬這樣才接近客戶的實際情況。

第二:怎麼進行引數化

首先在這裡先宣告一下,下面所有使用的例子都是錄製LoadRunner中自帶的的那個例子的註冊過程。


這裡包括兩部分的部分:

a)         編輯指令碼,使用引數代替常量;

b)        設定引數的屬性和資料來源;

那麼如何進行引數化呢?選中要引數化的內容點右鍵­->Replace with a parameter(如下圖)。輸入引數化的名稱,假設為password。

這時要我們要注意的一個問題是,當引數化結束後,指令碼儲存的根目錄下會多出一個引數化的檔案,

接下來的工作就是將引數化檔案合併,這裡只有兩個引數化檔案,合不合並可能不會有多大影響,但是如果當有多個引數化檔案並且每個檔案都佔很大空間時,

圖中多出兩個引數化的檔案(pw和user)就是剛才對兩個數進行引數化後的文字檔案,當然一般的情況下不要將這個引數化的檔案放到指令碼的目錄下,而應該是放到一個專門的檔案下,這樣可以保證引數化檔案與指令碼分離,如我們新建一個資料夾parameter,將所有引數化的文字檔案都放到這個資料夾下。

這裡我們只是兩個引數化檔案,那麼當有很多引數化檔案怎麼辦呢,因為當一個專案很大時,其錄製的業務很多時,引數化檔案會很多,甚至上幾百MB時,這時為了方便管理引數化檔案和節約空間我們會對引數化檔案進行合併到一個資料夾中,如果上面兩個引數化檔案就可以合併,引數化之間用逗號隔開即可,如下圖合併好後的引數化檔案。

再看一下引數化的屬性:

a)        引數型別屬性:

1.         "Date/Time"(日期/時間)引數型別:

"Date/Time"型別用當前的日期和/或時間替換引數。要指定日期/時間的格式,可以從選單列表中選擇,或者指定實際需要的格式。該格式應該與指令碼中錄製的日期/時間格式相對應。還可以單擊該對話方塊中相應的按鈕對格式進行新增、刪除、還原等操作。

2.         "Group Name"(組名)引數型別:

用Vuser組的名稱替換引數。建立方案時,要指定Vuser組的名稱,否則執行VuGen的指令碼時,組名始終為"無"。但在VuGen中執行時,Group Name將會是None。

3.         "Iteration Number"(迭代編號)引數型別:用當前的迭代編號替換引數。

4.         "Load Generator Name"(負載生成器名)引數型別:用Vuser指令碼的負載生成器名替換引數。負載生成器是執行Vuser的計算機。

5.         "Random Number"(隨機編號)引數型別:用一個隨機生成的整數替換引數,可以通過指定最小和最大值,設定隨機編號的範圍。

6.         "Unique Number"(唯一編號)引數型別:用一個唯一編號替換引數。"Block size"(塊大小)指明分配給每個Vuser的編號塊的大小。每個Vuser都從其範圍的下限(start)開始,在每次迭代時遞增該引數值。

7.         "Vuser ID"引數型別:LoadRunner使用該虛擬使用者的ID來代替引數值,該ID是由Controller來控制。在VuGen中執行指令碼時,VuGen將會是-1。

8.         File引數型別:可以在引數屬性中編輯引數檔案,也可以直接編輯好引數檔案通過路徑來選擇,還有從現成的資料庫中提取。這是引數化最常的一種引數型別。

b)        Browse屬性:

這裡是用來選擇引數檔案的路徑,這裡要注意的一個問題是,一般我們在做引數化的時候沒有單獨把引數檔案放到一個資料夾下,所以一般我們都沒有更改過這塊,但我們上面已經講過,一般都會將引數化檔案合併到一個檔案下並放到一個專門管理引數的資料夾下,這樣我說就要選擇引數的路徑,否則無法讀到引數檔案中的引數,具體的如下圖。

選擇好之後,會列出引數化檔案中所有的項,如下圖:


注意:讀者可能會發現,這樣如果我們換一個把這個指令碼拷貝到另外一臺機器上去這個路徑不就出錯了嗎?也就是我們的指令碼可移植性不好,對是的,會出錯,因為這裡寫的是絕對路徑,如果換到其它的一個盤或機器,執行就報錯了,那麼怎麼解決這個問題?這裡我們採用相對路徑來解決這個問題,這是我們Browse設定為相對路徑,將指令碼的根目錄使用“。“來代替。見下圖,這樣就不會出錯了。


這樣就解決了上面的那個問題,具體更好的可移植性了。

c)         匯入資料方法:

LoadRunner允許使用Microsoft Query或者指定資料庫連線字串與SQL語句,利用引數化從已存在的資料庫中匯入資料。在這裡這兩種匯入資料的方法的區別在於使用Microsoft Query時,不要新建資料來源,在匯入嚮導過程中直接連線資料庫,而手動指定資料庫字元器,需要先做好資料來源,現在一般都使用這種方法。

下面我們來看一下使用Data Wizard中的Specify SQL statement manually如何匯入資料庫中的資料。

首先建立一個數據源,在這裡我個做一個數據源,名稱為LR,點選Data Wizard按鈕,選擇使用SQL語句(如下圖)。


接下來是選擇資料來源和寫SQL語句(如下圖)。


連線成功後,資料將會被成功的匯入,下面我們看一下資料庫中資料被匯入到的情況。


d)        Select next now屬性:

注意:這裡要注意的是所有的Select next now屬性選擇是針對虛擬使用者來說的,也就是這裡的策略是針對Controller設定的,在除錯指令碼的過程中是看不出來的,其決定虛擬使用者如何選擇引數的過程。

Ø         Sequential:虛擬使用者Vuser按照行順序的進行讀取引數檔案中的資料,如果引數檔案中沒有足夠的資料,則返回到第一個值,並一直迴圈到結束。

例:如上圖我們這裡有arivn01到arivn07七個資料,假設我們有10個Vuser,那麼第1個Vuser讀到的引數為arivn01,於此類推,到第8個Vuser的時候,這裡表中已經沒有資料了,於是又從第一個資料開始讀取,故第8個Vuser讀到的資料是arivn01,第9個Vuser讀到的資料是arivn02。

Ø         Random:每個Vuser從表中隨機的讀起引數資料,假設有50個數據,那麼隨機數

將在1~50之間隨機取一個,然後把這個數做為行號,去讀取相應行的引數資料。

Ø         Unique:唯一的數,即每個Vuser取到的引數均不一致,這裡強調了使用者的差異性。

Ø         Same link as ***:如果一個指令碼中定義了多個引數,而有一些引數應該是對應的關係,如上圖中的使用者名稱和密碼就是對應關係,即密碼應該始終和使用者名稱對,這時就要用到這個選項。

e)        Update value on屬性:

注意:這裡設定的策略是針對指令碼的迭代來講的,也就是說這裡的一切策略其僅僅在指令碼迭代次數發揮作用,而對Vuser選擇引數沒有影響。

Ø         Each iteration:指令碼每迭代一次都訪問資料表中的下一個值。

注意:如果在一次迭代過程中,某個引數使用到兩次,如下圖這個例子中,在一次迭代中使用到兩次使用者名稱和密碼,這兩次使用的同一個資料,而並不是兩個資料。


下面我們來看一下編輯的結果

第一次迭代使用表中資料的結果

再看第二次迭代使用表中資料的結果

Ø         Each occurrence:引數在每次迭代的過程中,引數的值都的更新。

注意:如果一個引數在一次迭代過程中出現多次,在同一次迭代過程中也得更新,下面同樣看這個例子,其迭代的結果。


Ø         Once:在同一個Vuser中一直取同一個引數,表中的資料不參於迭代的過程。

還是看我們上面的例子的結果:


到這裡引數化的過程已經全部講完,這裡總結一下,引數化過程中要注意的問題:

1)        引數化檔案儘可能少,因為引數是放在記憶體中的,佔用了記憶體的資源;

2)        引數化檔案與指令碼分離;

3)        引數檔案的路徑應該以相對路徑來取;

4)        一些時候為了使引數更具有真實性,引數應該從資料庫中來獲得;

5)        引數型別的選擇;

6)        引數的資料一般要由業務決定;

後記:引數化到這裡已經徹底講完了,主要涉及的內容是:

1)        為什麼要進行引數化;

2)        如何進行引數化;

3)        引數化過程中要注意那些問題: