我們還是引用上次那個(gè)例子:測試一個(gè)論壇系統的兩個(gè)業(yè)務(wù),A查看帖子、B回復帖子,假設每天會(huì )員查看帖子的總數(PV)是回復帖子的2倍,也就是A:B=2:1,因此我們的性能測試也要符合這一比例,如果我們測出的結果是5:1,那么測試結果就沒(méi)有意義了。
這里我們要先講一個(gè)容易混淆的概念。是不是性能測試中的考慮時(shí)間等于用戶(hù)實(shí)際使用中的“考慮的時(shí)間”呢。答案是不。我們不能根據用戶(hù)實(shí)際的考慮時(shí)間來(lái)設置性能測試的考慮時(shí)間,而要經(jīng)過(guò)計算才能得到正確的考慮時(shí)間。
一般我們會(huì )先錄制編寫(xiě)A、B的測試腳本,這時(shí)要把腳本中的考慮時(shí)間全部刪除,因為錄制時(shí)產(chǎn)生的考慮時(shí)間不能直接作為正式性能測試的考慮時(shí)間。腳本制作好以后我們開(kāi)始進(jìn)行計算,(當然也可以先計算再做腳本)。
剛才我們的要求是A:B=2:1,我們還要確定具體的數字,比如我們經(jīng)過(guò)分析發(fā)現,論壇系統A業(yè)務(wù)每小時(shí)的(PV)數量大約是10k,B業(yè)務(wù)是5k,而且對用戶(hù)來(lái)說(shuō),頁(yè)面的響應時(shí)間最多不能超過(guò)5秒。好,這就是我們測試的一個(gè)基準。注意,這些數據在計算前就需要確定下來(lái),我們可以從類(lèi)似的系統中采集數據,也可以根據用戶(hù)的數量進(jìn)行估算,這些工作可以和產(chǎn)品經(jīng)理討論溝通,達成一致。
確定了這些數據基準以后,我們開(kāi)始計算。這里先講一個(gè)公式:
并發(fā)數 / (響應時(shí)間+考慮時(shí)間) = 總業(yè)務(wù)數 / 總時(shí)間
先看等式右邊,這在上一篇曾經(jīng)出現過(guò):總業(yè)務(wù)數 / 總時(shí)間 = 系統吞吐量。
比如A業(yè)務(wù)每小時(shí)是10k,那么系統處理A的吞吐量就是:10k / 3600s = 2.78次/s。也就是說(shuō)系統每秒鐘會(huì )處理2.78次A業(yè)務(wù),同理,系統會(huì )處理1.39次B業(yè)務(wù),注意,系統是在一秒內同時(shí)完成了2.78次A業(yè)務(wù)和1.39次B業(yè)務(wù),因此我們測試時(shí)不能把A和B分開(kāi)來(lái)測。
再看一下等式的左邊,并發(fā)數指的是性能測試時(shí),同時(shí)運行某一腳本的個(gè)數。我們先來(lái)算A業(yè)務(wù)的,由于用戶(hù)對響應時(shí)間要求的上限是5秒,我們就確定(響應時(shí)間+考慮時(shí)間) =5秒,這樣把5秒帶入公式:
并發(fā)數 = 2.78 × 5 = 13.89
因此我們需要按照A腳本14路,B腳本7路這樣的壓力來(lái)測試?墒,考慮時(shí)間不是還沒(méi)有算出來(lái)么?
講到這里,就需要明確一個(gè)定義了:我們要設置考慮時(shí)間,最終的目的是要保證:(響應時(shí)間+考慮時(shí)間) 是一個(gè)定值!
如果(響應時(shí)間+考慮時(shí)間)會(huì )不停的變化,那么這個(gè)等式就無(wú)法成立,這樣就會(huì )出現測試結果的偏差。這里最主要的問(wèn)題是,響應時(shí)間是不受我們控制的,響應時(shí)間如果變小,那么測出的吞吐量就會(huì )變大,從而影響到其他的業(yè)務(wù)。
那我們怎么做才能保證(響應+考慮)是一個(gè)定值呢?最完美的方法是在測試腳本中設置,首先在腳本開(kāi)始的時(shí)候定義一個(gè)計時(shí)器,等腳本執行完后,統計一下經(jīng)過(guò)的時(shí)間,如果不到5秒,就sleep一直到5秒,然后再結束當前腳本。如果超過(guò)5秒,就說(shuō)明系統已經(jīng)不合格了。
最簡(jiǎn)單的方法,是人為的指定一個(gè)考慮時(shí)間,來(lái)讓?zhuān)憫?考慮)=5秒。這樣的測試結果就沒(méi)那么精確了,而且可能需要執行很多次腳本,才能實(shí)現這個(gè)要求。比如我們先設考慮時(shí)間為2秒,執行發(fā)現響應時(shí)間是1秒,加起來(lái)是3秒,于是我們調整考慮時(shí)間為4秒。隨著(zhù)考慮時(shí)間的調整,響應時(shí)間也會(huì )跟著(zhù)變,呵呵,需要耐心。
到此為止,對于考慮時(shí)間的說(shuō)明已經(jīng)講完了。只要我們能保證(響應+考慮)是一個(gè)定值,就能有效的控制各個(gè)業(yè)務(wù)的測試比例,從而使我們的測試環(huán)境更符合要求。最后要說(shuō)一下,這種算法是針對于評估系統的吞吐量,并不適用于壓力測試或者是強度測試。
延伸閱讀
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/