參數化的意義不再贅述,參數化有兩種情況:
1.后台(應用程序和數據庫)對請求里的參數值限制了唯一性,說白了就是功能里要求的不能重復的參數,如果有這類唯一性校驗的參數就需要參數化;
2.避免因數據庫查詢緩存而導致性能測試結果的失真;
這里的數據庫查詢緩存是指在該條請求之前,數據庫已經有該條請求結果數據存在緩存里,當在此請求時,數據庫首先會去緩存里找要執行的查詢sql,找到了直接就返回了數據,不必要后面很多方所得操作;
顯然這種情況下的性能執行結果要比沒有緩存的結果快的多,所以存在性能結果失真的問題。,孤兒我們要參數化,請求不同的數據。
關於數據庫的sql執行原理,這里不再贅述,以后在性能調優的時候再研究,暫時參考:http://blog.csdn.net/wanghjbuf/article/details/50792970
3.當參數不是一個常量,不同情況下值有變化,比如IP地址,就可以參數化,當IP變了后我改下參數就可以,沒必要每次去修改腳本里的地址,便於維護代碼。
參數化又有不同的方法,基本都大同小異,在參數化之前可以思考下,怎樣降低參數化操作的可能性,可以圍繞上述說的幾點:1.測試的時候取消數據庫和應用程序的唯一性校驗;2.測試的時候關閉數據庫的緩存功能。
這里介紹兩種,一種是直接邊界參數,還有一種是操作數據庫,從數據庫里導入數據。
下面主要介紹多列參數一一對應時的參數化,比如這里需要參數化四個參數,這四個參數是一一對應的:用戶名、密碼、確認密碼、郵箱,參數化步驟如下:
1.選中需要參數化的對象,右鍵,點擊【Replace with a new parameter】
2.點擊【browser】,在腳本目錄下新建params目錄,用來存放這個腳本的所有參數化數據,選中目錄后,點擊【create table】
3.點擊【edit with notpad】打開記事本,在記事本里輸入參數(換行分割),關閉記事本,關閉參數化屬性,點擊【OK】,這樣username就參數化好了
4.選中密碼,重復上述步驟1,進入參數屬性頁面,選中剛才創建好的Newparam文件,點擊【add colum】,點擊【OK】
5.點擊【edit with notpad】打開記事本,逗號后面輸入密碼參數,保存關閉記事本,關閉參數屬性,點擊【OK】
確認密碼、郵箱同步驟五,都創建好后我們來看下參數化策略;
Select next row【選擇下一行】
1.順序(Sequential):按照參數化的數據順序,一個一個的來取。
2.隨機(Random):參數化中的數據,每次隨機的從中抽取數據。
3.唯一(Unique):為每個虛擬用戶分配一條唯一的數據
Update value on【更新時的值】
每次迭代(Each iteration) :每次迭代時取新的值,假如50個用戶都取第一條數據,稱為一次迭代;完了50個用戶都取第二條數據,后面以此類推。
每次出現(Each occurrence):每次參數時取新的值,這里強調前后兩次取值不能相同。
只取一次(once) :參數化中的數據,一條數據只能被抽取一次。(如果數據輪次完,腳本還在運行將會報錯)
組合起來就有9種策略,如下:
Select Next Row 【選擇下一行】 |
Update Value On 【更新時的值】 |
Replay Result 【結果】 |
順序(Sequential) |
每次迭代(Each iteration) |
結果:分別將15條數據寫入數據表中 功能說明:每迭代一次取一行值,從第一行開始取。當所有的值取完后,再從第一行開始取 如:如果參數化文件中有15條數據,而迭代設置為16次,那執行結果中,參數化文件第一行的數據有兩條 |
順序(Sequential) |
每次出現(Each occurrence) |
結果:分別將15條數據寫入數據表中 功能說明:每迭代一次取一行值,從第一行開始取。當所有的值取完后,再從第一行開始取 如:如果參數化文件中有15條數據,而迭代設置為16次,那執行結果中,參數化文件第一行的數據有兩條 |
順序(Sequential) |
只取一次(once) |
結果:表中寫入15條一模一樣的數據。 功能說明:每次迭代都取參數化文件中第一行的數據。 |
隨機(Random) |
每次迭代(Each iteration) |
結果:表中寫入15條數據,但可能有重復數據出現 功能說明:每次從參數化文件中隨機選擇一行數據進行賦值 |
隨機(Random) |
每次出現(Each occurrence) |
結果:表中寫入15條數據,但可能有重復數據出現 功能說明:每次從參數化文件中隨機選擇一行數據進行賦值 |
隨機(Random) |
只取一次(once) |
結果:表中寫入15條相同數據 功能說明:第一次迭代時隨機從參數化文件中取一行數據,后面每次迭代都用第一次迭代的數據。 |
唯一(Unique) |
每次迭代(Each iteration) 自動分配塊大小 |
結果:分別將15條數據寫入數據表中 功能說明:第一次迭代取參數化文件中的第一條數據,第二次迭代取第二條數據,以此類推。 注:如果設置迭代次數為16次。結果:在執行第16次迭代時會拋異常,異常日志可在LoadRunner的回放日志(replayLog)中看到。 |
唯一(Unique) |
每次出現(Each occurrence) 步長為1 |
結果:分別將15條數據寫入數據表中 功能說明:第一次迭代取參數化文件中的第一條數據,第二次迭代取第二條數據,以此類推。 注:如果設置迭代次數為16次,而參數化文件中只有15條數據,明顯數據不夠。此時可以設置“when out of values”屬性來判斷當數據不夠時的處理方式 Abort Vuser:中斷虛擬用戶 Countinue in a cylic manage:循環取參數化文件中的值,即:當參數化文件中的值取完后又從參數化文件的第一行開始取值。 Countinue with last value:繼續用最后一條數據 |
唯一(Unique) |
只取一次(once) |
結果:表中寫入15條相同數據 功能說明:每次都取參數文件中的第一條數據進行賦值 |
綜上所述,我們這里的注冊需要每次的數據都不一樣,那么我們就選第7中策略,Unique+Each iteration,用戶一第一次迭代取參數化文件中的第一條數據,第二次迭代取第二條數據;用戶二第一次迭代取參數化文件中的第三條數據,第二次迭代取第四條數據,以此類推。當迭代次數大於參數化數據時會報錯,設置如下:
Tips:因為這里,每個迭代內值調用了一次參數,所以選Each iteration(每個迭代),如果這個迭代里調用兩次參數,那么需要選(Each occurrence),意思是每次迭代里的每次參數都需要不一樣。
接下來介紹下從數據庫里導入參數,因為sql server百度里已經有很多介紹,這里不再贅述,主要講下mysql,mysql的數據庫驅動需要自己安裝,這里給個路徑,大家上官網上下就行:
https://dev.mysql.com/downloads/connector/odbc/
下載好后按默認的設置安裝完成即可,這里我們拿登錄舉例,我們直接從數據庫里查詢到用戶名作為參數。
1.參照上面的第一步,進入參數屬性頁面,依次按下圖所示點擊
2.繼續依次按下圖所示點擊
3.選中剛才安裝的mysql驅動,點擊下一步,點擊完成
4.數據庫信息如下填寫,測試成功后,點擊【OK】,【確定】,知道回到步驟五的界面
5.sql中輸入查詢語句,點擊【finish】后,參數化就成功了
以上就是鄙人對參數化的粗淺認識,如若有不妥之處還望指正,感謝!