LoadRunner有自帶的隨機函數,如果巧妙的加以采用,能解決一些看似很困難的實(shí)際問(wèn)題。下面通過(guò)實(shí)際案例來(lái)做個(gè)分享。
前段時(shí)間在做一個(gè)項目的性能測試。該項目比較特殊,它與數據庫直連,根據外部傳入的SQL ID和SQL參數,從指定數據庫中讀取SQL模版,拼裝成真實(shí)的SQL語(yǔ)句、執行,并將得到的結果放入緩存中。目的是減少數據庫的壓力。
該系統將支撐大量的SQL操作,性能自然成為備受關(guān)注的焦點(diǎn)之一。
由于它跟SQL語(yǔ)句相關(guān),在真實(shí)環(huán)境下,同一時(shí)間可能執行著(zhù)不同類(lèi)型的SQL,即便是同一類(lèi)型,其參數也各式各樣。那么,怎樣才能模擬出最符合實(shí)際情況的性能測試場(chǎng)景呢?
首先設計場(chǎng)景,即,在LoadRunner中按照比例隨機取到某一類(lèi)型的SQL,再隨機傳入參數給它,讓最終的每條SQL都是隨機生成,各不相同。
從場(chǎng)景中,可以看到,此處涉及雙重隨機。只采用loadruner的參數設置是無(wú)法實(shí)現的。此時(shí)需要想辦法先按設定好的比例隨機取到SQL,然后在每條SQL上隨機取參數列表中的參數。
于是想到了loadrunner的隨機函數。先實(shí)現隨機取SQL ID,之后再在特定的SQL中隨機取參數列表中的參數。
LoadRunner中,隨機函數是rand(),它用來(lái)產(chǎn)生0到rand_max之間的隨機整數。函數原型是
int rand ( void );
然而調用rand之前,必須給隨機數產(chǎn)生一個(gè)隨機種子。這個(gè)種子由srand()函數產(chǎn)生。其原型是
int srand ( seedTime );
采用上述兩個(gè)函數,就能實(shí)現第一重隨機了。具體腳本代碼如下:
| //generate rand number web_url(”test”, “URL=http://host_name:8080/interface?sqlId=sqlid_name2&value={random_para2} “, else if(rNum>=8 && rNum<10){ |
注:sqlid_name是SQL ID名稱(chēng);random_para是通過(guò)file方式實(shí)現的隨機參數;tn是web_url函數的快照名稱(chēng)。
通過(guò)上面的腳本,實(shí)現了性能測試設計的場(chǎng)景。調試通過(guò)后,放入Controller中執行。實(shí)際執行過(guò)程中,Vuser將會(huì )按比例隨機取到不同類(lèi)型的SQL,并隨機取到SQL中的參數,執行特定的SQL語(yǔ)句。
巧用LoadRunner的隨機函數,能幫助我們解決不少實(shí)際問(wèn)題。

