LoadRunner之參數化


一、為什么要進行參數化

  LoadRunner在錄制腳本的時候,只是忠實的記錄了所有從客戶端發送到服務器的數據,而在進行性能測試的時候,為了更接近真實的模擬現實應用,對於某些信息需要每次提交不同的數據,或者使用多個不同的值進行循環輸入。這時,在LoadRunner中就可以進行參數化設置,以使用多個不同的值提交應用請求。

二、是否必須要做參數化

參數化可以盡量不用做,但是以下兩種情況需要做參數化

1、插入數據時,數據庫字段要求是唯一的。

2、避免走數據庫的查詢緩存。比如:每次都用同一個用戶登錄,頁面展示該用戶的信息,每次登錄都跑同一個sql語句,執行第一次以后就被保存到數據庫的緩存當中,后面再用該用戶登錄就不會去數據庫里面查詢了,而是直接從緩存里面取出來。這樣就少了sql語句的解析過程,后面每次執行就會快一些。但是線上真實的情況不可能是同一個人一直在不斷的登錄,而是不同的用戶在登錄,所以這種情況也是必須要做參數化的。

三、怎么進行參數化

1.、在腳本中選擇需要參數化的內容,單擊鼠標右鍵,從彈出菜單中選擇Replace with a parameter

2. 在彈出的對話框中設置參數名稱、參數類型

3. 單擊對話框中的Properties按鈕,可以設置參數數據池中的內容以及參數的取值方式

數據類型:

序號

參數類型

說明

1

Date/Time

在需要輸入日期、時間的地方,可以用Date/Time來代替,可以選擇日期格式,也可進行定制。

2

Group Name

該類型的參數用執行腳本的VU所屬組的名稱來替代。但是在VuGen中運行時,該值為None。

3

LoadGeneratorName

LoadRunner使用該虛擬用戶所在的Load Generator機器名來代替參數。

4

Iteration Number

LoadRunner使用該測試腳本當前循環的次數來代替參數

5

Random Number

隨機數,可以設置產生隨機數的范圍

6

Unique Number

唯一值來代替參數

7

Vuser ID

LoadRunner使用該虛擬用戶的ID來代替參數值,該ID是由Controller來控制的,在VuGen中運行腳本時,該值為-1.

8

DataFile/Table

可以在屬性設置中編輯文件,添加內容,也可以從數據庫中提取數據。

9

UseDefinedFunction

從dll的簡單函數中獲取信息替代參數

注意:對於參數類型為File/Table的數據文件

1、在參數數據顯示區中,最多只顯示前100條數據,之后的不顯示,但不影響正常取數據

2、在記事本中編輯參數數據時,數據文件一定要以一個空行結束,否則,最后一行輸入的數據不會被參數所使用

四、文件參數化取值策略

對於參數類型為File/Table的參數的更新方式

假設一個dat文件中有多列值,Selectcolumn中設置取值的標識:by number是按第一列、第二列、第三列的方式取列值;by name是按列名取值。File format中column定義分列方式,是按逗號,tab還是空格;First data定義取值從列表的第幾行開始取值,默認是第一行。

與參數取值方式相關的設置有三個:

1、Select next row:下次取值怎么取

(1)Sequential:按照順序一行行的取值。每一個虛擬用戶都會按照相同的順序讀取

(2)Random:在每次迭代里隨機的讀取一個,但是在循環中一直保持不變

(3)Unique :每個VU取唯一的值

除此之外還有一個Same Line As ,可以設置和前面定義的參數取同行的記錄。通常用在有關聯性的數據上面。比如做登錄測試的腳本時,每個用戶的密碼都不同,就可以這樣定義:創建參數文件,共兩列username、passwd,則設置完username的取值方式后passwd設成 same line as username。

2、Update value on:碰到什么情況去更新這條數據

  (1)Each iteration :每次迭代都要取新值。從action頭運行到action尾叫一次迭代。

  (2)Each occurrence :每次出現重新取值,如果一個action中該參數多次出現,每遇到一個就要重新取一個值

  (3)Once :取一次之后再也不變了

3、When out of value:值不夠的情況如何取值

Unique實際上是壓力測試中更為常用的設置。如果Select next row選擇unique的設置,每個數據只會用一次,當調用的次數或迭代次數超過值的個數時就可能會報錯。when out of value可以選擇當數值個數不夠的情況系統改如何取值。

  (1)Abort Vuser:停止測試

  (2)Continue in a cyclic manner:循環取值,再重新開始新一輪的unique取值

  (3)Continue with last value:沿用最后一個值

五、舉例說明

1、單用戶多次循環

Action里面username出現2次,password出現一次

username(1,2,3,4,5)

password(a,b,c,d,e)

(1)Sequential + Each iteration

第1次循環:1,1,a

第2次循環:2,2,b

。。

。。

第5次循環:5,5,e

第6次循環:1,1,a

(2)Sequential + Each occurrence

第1次循環:1,2,a

第2次循環:3,4,b

第3次循環:5,1,c

第4次循環:2,3,d

第5次循環:4,5,e

(3)Sequential + Once

第1次循環:1,1,a

第2次循環:1,1,a

。。

第5次循環:1,1,a

第n次循環:1,1,a

(4)Unique + Each iteration + Continue with last value

第1次循環:1,1,a

第2次循環:2,2,b

。。

第5次循環:5,5,e

第n次循環:5,5,e(會提示值已經用完,但依然會執行下去,沿用第5次的取值)

(5)Unique + Each iteration + Continue in a cyclic manner

第1次循環:1,1,a

第2次循環:2,2,b

。。

第5次循環:5,5,e

第6次循環:1,1,a   (值取完后又循環開始取)

第7次循環:2,2,b

(6)Unique + Each iteration + Abort Vuser

第1次循環:1,1,a

第2次循環:2,2,b

。。

第5次循環:5,5,e

第6次循環:報錯並停止運行

(7)Unique + Each occurrence + Continue with last value

第1次循環:1,2,a

第2次循環:3,4,b

第3次循環:5,5,c  (這一步第二個username取值會提示值已經取完)

第4次循環:5,5,d  (username值已經取完,一直提示)

第5次循環:5,5,e  (username值已經取完,一直提示)

第6次循環:5,5,e  (username和password值都取完了,這一步三個取值都提示值已經取完)

(8)Unique + Each occurrence + Continue in a cyclic manner

第1次循環:1,2,a

第2次循環:3,4,b

第3次循環:5,1,c  (username值取完又循環開始取)

第4次循環:2,3,d

第5次循環:4,5,e

第6次循環:1,2,a  (username和password值都取完,都開始循環取)

(9)Unique + Each occurrence + Abort Vuser

第1次循環:1,2,a

第2次循環:3,4,b

第3次循環:5,報錯,第二個username取值時報錯,並停止運行

(10)Unique + Once

第1次循環:1,1,a

第2次循環:1,1,a

。。

第5次循環:1,1,a

第n次循環:1,1,a

2、多用戶循環取值(Unique)

Action只有一個username,出現兩次

多個用戶並發的時候,每個用戶都是獨立取值的,任何用戶取值都不會影響到其他用戶。但是,有一種情況是除外。Select next row選擇Unique時,LoadRunner會預先將參數值分配給每個用戶,分配給A用戶的值B用戶就不能再用,分配給B用戶的值A用戶也不能用,參數值都是被用戶獨占的。下面我們來舉例說明:

(1)Unique + Each iteration + Continue with last value

    三個用戶A、B、C,循環3次:

    username(1,2,3,4,5,6)

因為配置寫的是給每個用戶分配2個值。LoadRunner預先將1,2分配給了A用戶,3,4分配給了B用戶,5,6分配給了C用戶

A用戶第一次循環:1,1

A用戶第二次循環:2,2

A用戶第三次循環:2,2  (值取完了之后每次都取最后一個)

B用戶第一次循環:3,3

B用戶第二次循環:4,4

C用戶第三次循環:4,4  (值取完了之后每次都取最后一個)

C用戶第一次循環:5,5

C用戶第二次循環:6,6

C用戶第三次循環:6,6  (值取完了之后每次都取最后一個)

(2)Unique + Each occurrence + Continue with last value

    三個用戶A、B、C循環3次

    username(1,2,3,4,5,6,7,8,9,10,11,12)

因為配置寫的是給每個用戶分配4個值。LoadRunner預先將1,2,3,4分配給了A用戶,5,6,7,8分配給了B用戶,9,10,11,12分配給了C用戶

A用戶第一次循環:1,2

A用戶第二次循環:3,4

A用戶第三次循環:4,4      (值取完了之后每次都取最后一個)

B用戶第一次循環:5,6

B用戶第二次循環:7,8

C用戶第三次循環:8,8      (值取完了之后每次都取最后一個)

C用戶第一次循環:9,10

C用戶第二次循環:11,12

C用戶第三次循環:12,12  (值取完了之后每次都取最后一個)

(3)Unique + Once

    三個用戶A、B、C,循環3次:

    username(1,2,3,4,5,6)

自動分配,LoadRunner預先將1,2分配給了A用戶,3,4分配給了B用戶,5,6分配給了C用戶

A用戶第一次循環:1,1

A用戶第二次循環:1,1

A用戶第三次循環:1,1

B用戶第一次循環:3,3

B用戶第二次循環:3,3

C用戶第三次循環:3,3

C用戶第一次循環:5,5

C用戶第二次循環:5,5

C用戶第三次循環:5,5

3、多用戶循環取值(Sequential&Random)

Select next row 選擇Sequential和Random時,所有用戶的取值都不受其他用戶的影響。

username(1,2,3,4,5,6,7,8,9,10)

假如有三個用戶A、B、C,三個用戶都可以在1~10當中取值,不存在獨占的情況。取值的規律是和單用戶一樣的,這里就不再介紹了。

4、練習

銀行流水號參數化,要求:1000人的並發,運行15分鍾,tps為1000。參數化如何設置

分析:

1、參數化所需數據總數:1000*15*60=900000

2、每個用戶分配數據條數:900000/1000=900,這里我們給每個用戶多給100個數即1000,那上面的總數應該是1000*1000=1000000

3、銀行流水號是不能重復的,所以要選Unique

具體設置如下:

六、其他參數類型介紹

1、Random Number

2、Vuser ID

3、Date/Time


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM