|
通過用lr做負(fù)載壓力測試過程發(fā)現(xiàn),如果設(shè)定不同的action迭代次數(shù),每次得出的結(jié)果是不同的,曲線的表現(xiàn)形式也是不同的。這點就使我們會感覺困惑,為什么要設(shè)置action的迭代次數(shù)?以及對于不同的應(yīng)用系統(tǒng)應(yīng)該怎樣設(shè)置迭代次數(shù)呢? 首先你要理解性能測試是在干什么? 性能測試是模擬系統(tǒng)一段時間內(nèi)真實的壓力情況,以考察系統(tǒng)的性能。 再看怎么模擬系統(tǒng)真實的壓力情況?比如在半個小時內(nèi),用戶都在進(jìn)行登錄操作,且平均分布在這半個小時內(nèi)。我們要做的是什么?模擬這半個小時用戶的行為。怎么模擬?估算出同時操作的人數(shù),并用LoadRunner不斷的發(fā)送登錄請求,這就是我們?yōu)槭裁匆?/p> 至于迭代次數(shù),只要能夠模擬出真實情況,多少次都無所謂,不過10次8次估計是模擬不出來。迭代次數(shù)至少要保證壓力達(dá)到一個穩(wěn)定值后再運行一段時間,這樣我們得到的數(shù)據(jù)才是有效的。所以我們除非是特別要求,一般不用迭代次數(shù),而是用運行時間。 1、迭代和并發(fā),是完全不同的概念。沒有什么關(guān)系。 比如,一個用戶迭代十次,還是一個用戶的壓力。 10個用戶執(zhí)行一次,就是10個用戶的壓力。10個用戶迭代10次,還是10個用戶的壓力。但他們都和參數(shù)化的數(shù)據(jù)有關(guān)系(也要看參數(shù)化是如何設(shè)置的,以及系統(tǒng)如何判斷提交值的)。 2、你要是想知道,LR是如何實現(xiàn)迭代和并發(fā): 說一個比較容易理解的層面:迭代就是不停的反復(fù)調(diào)用同一腳本,反復(fù)執(zhí)行,注意,對1個用戶執(zhí)行10次來說,只會分配一塊內(nèi)存。10個用戶執(zhí)行一次,是調(diào)用同一腳本10次,會分配10塊內(nèi)存。LR調(diào)用腳本,編譯后,運行,按腳本發(fā)送數(shù)據(jù)。 比如:web_url這樣的函數(shù),執(zhí)行就會發(fā)HTTP request。 如果你還想知道更細(xì)節(jié)的進(jìn)程和函數(shù)的實現(xiàn),只能側(cè)面驗證(具體方法看各人的能力和擅長),因為我們都不是LR的開發(fā)者。 3、太顯然的問題了,參數(shù)化時選擇每次出現(xiàn)唯一,只要參數(shù)夠用就OK,不夠用,就設(shè)置相應(yīng)的規(guī)則。 action在場景運行中iteration只對其起作用,對vuser_init和vuser_end都不起作用,action是一個可以被重復(fù)使用的最小單位其實你可以將所有腳本錄制到一個action里,只是不方便管理罷了。 舉個最簡單的例子,像lr自帶的例子——訂票系統(tǒng),你如果把所有腳本都錄制到一個action里,那回放的時候,每個用戶登錄就只能買一張票,而如果想一個用戶買多張票的話,這樣就行不通了。那你就要設(shè)多個action,并把登錄和結(jié)束各錄制在一個action里,把買票錄到一個action中,這樣,將買票的action迭代多次,而用戶登錄和結(jié)束只運行一次,這不就模擬了現(xiàn)實中的情況了嗎? 其實LoadRunner是以客戶端的角度來定義“響應(yīng)時間”的,當(dāng)客戶端請求發(fā)出去后,LoadRunner就開始計算響應(yīng)時間,一直到它收到服務(wù)器端的響應(yīng)。這個時候問題就產(chǎn)生了:如果此時的服務(wù)器端的排隊隊列已滿,服務(wù)器資源正處于忙碌的狀態(tài),那么該請求會駐留在服務(wù)器的線程中,換句話說,這個新產(chǎn)生的請求并不會對服務(wù)器端產(chǎn)生真正的負(fù)載,但很遺憾的是,該請求的計時器已經(jīng)啟動了,因此我們很容易就可以預(yù)見到,這個請求的響應(yīng)時間會變得很長,甚至可能長到使得該請求由于超時而失敗。等到測試結(jié)束后,我們查看一下結(jié)果,就會發(fā)現(xiàn)這樣一個很不幸的現(xiàn)象:事務(wù)平均響應(yīng)時間很長,最小響應(yīng)時間與最大響應(yīng)時間的差距很大,而這個時候的平均響應(yīng)時間,其實也就失去了它應(yīng)有的意義。也就是說,由于客戶端發(fā)送的請求太快而導(dǎo)致影響了實際的測量結(jié)果,設(shè)置步長則可以緩解這一情況,這樣,應(yīng)該試試設(shè)置pacing,再運行看看情況。 |
|
|
來自: 山泉水清 > 《LoadRunner》