一、為什么要進行參數化
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