我遇到很多客戶做過壓力測試 ? 有大規(guī)模的,也有小規(guī)模的 ? 有用開源工具的,也有用商業(yè)軟件的。 壓力測試本身變得越來越容易,越來越可以支付的起??因?yàn)槌霈F(xiàn)了很多很好用的壓力測試工具。還有一些公司提供在線壓力測試服務(wù)。盡管做壓力測試越來越容易、越來越有效率、而能花很小的代價(jià)產(chǎn)生很大的壓強(qiáng),但是我的所有客戶都遇到了同樣一個(gè)問題:壓力測試并不會(huì)報(bào)告是什么導(dǎo)致了問題。它只會(huì)報(bào)告這有了問題,例如:查詢頁面在并發(fā)50個(gè)用戶使用時(shí)變慢下來,但它不會(huì)顯示什么導(dǎo)致了變慢。捕獲到的性能統(tǒng)計(jì)數(shù)據(jù)例如CPU和內(nèi)存使用量只是強(qiáng)調(diào)了潛在的問題區(qū)域,但并不會(huì)指出實(shí)際的根源在應(yīng)用程序的什么地方。

  標(biāo)準(zhǔn)的壓力測試報(bào)告只提供黑盒視圖(Black-Box View)

  當(dāng)分析下面的壓力測試報(bào)告時(shí)我們只能發(fā)現(xiàn)在我們的應(yīng)用程序的壓力達(dá)到某個(gè)“點(diǎn)擊數(shù)/秒”臨界點(diǎn)時(shí)問題出現(xiàn)了。

  壓力測試結(jié)果

  我們會(huì)發(fā)現(xiàn)服務(wù)器的CPU很可能跟問題有關(guān),因?yàn)樗氖褂寐孰S著我們產(chǎn)生壓強(qiáng)的增多迅速升高,但我們停下來分析問題時(shí),它的使用率也下來了。如果你把這個(gè)報(bào)告呈給你們的工程師,他們很可能會(huì)驚訝他們的應(yīng)用程序?yàn)槭裁慈绱说牟唤?jīng)壓,但他們也沒法告訴你是否是應(yīng)用程序出了什么問題(以及問題在哪)或者是當(dāng)前版本的應(yīng)用程序根本承受不起這么大的壓力。

  過多的測試迭代在拖累我們

  所以可以看出來,我們從壓力測試工具上獲得的標(biāo)準(zhǔn)測試報(bào)告并不能幫助我們分析出問題的根源在哪里。那通常我們是怎么終找出問題的呢?下面的圖例顯示的是我從我的客戶那里看到的典型的測試周期。

  需要反復(fù)迭代測試才能定位產(chǎn)生效能問題的根源

  每次測試之后他們都和工程師一起坐下來討論測試的結(jié)果。工程師們試圖重現(xiàn)報(bào)告中被重點(diǎn)顯示的問題。通常這些問題只有在有相當(dāng)壓力的情況下才會(huì)出現(xiàn),根本沒法在工程師的本地安裝了debugger工具或profiling工具的機(jī)器上重現(xiàn)?尚械霓k法是要改進(jìn)在測試中捕獲到的各種數(shù)據(jù)詳細(xì)程度。對捕捉信息的改進(jìn)可以包括收集額外的有用的性能數(shù)據(jù),例如CPU,內(nèi)存,I/O,內(nèi)存回收事件,數(shù)據(jù)庫統(tǒng)計(jì),… 報(bào)告應(yīng)用程序特殊數(shù)據(jù),例如n號訂單被處理了,處理隊(duì)列的長度,處于活動(dòng)狀態(tài)的用戶會(huì)話的數(shù)量,… 或者擴(kuò)展應(yīng)用程序輸出的日志,讓它跟蹤記錄性能信息,例如函數(shù)的調(diào)用次數(shù),執(zhí)行了哪些SQL語句,…

  當(dāng)改進(jìn)完成了之后,測試會(huì)再進(jìn)行一次。如果你很幸運(yùn),你會(huì)在第一次改進(jìn)后獲得你想要的數(shù)據(jù)結(jié)果。但據(jù)我所觀察的結(jié)果是通常要好幾輪改進(jìn)之后你才能得到能夠讓你分析出問題出在哪里并且能夠用來修正程序的報(bào)告信息。這些額外的測試迭代會(huì)耗費(fèi)測試者以及開發(fā)人員的大量時(shí)間。如果你有獨(dú)立的測試團(tuán)隊(duì)或者你外包了測試,那你或需要額外的開銷來應(yīng)付這些迭代測試。

  目標(biāo):花少的時(shí)間做更多的測試

  理想的目標(biāo)是去除所有的額外開銷,現(xiàn)狀來講包括在壓力測試中改進(jìn)和分析捕獲到的數(shù)據(jù)的工作量。美國Novell公司有一個(gè)精彩的例子來展示在他們的分布式敏捷開發(fā)團(tuán)隊(duì)里改進(jìn)壓力測試過程的。你可以在公布的學(xué)習(xí)案例中了解更詳細(xì)的信息。

  測試中的應(yīng)用性能管理 可以讓你去使壓力測試的功效發(fā)揮到。下圖展示了一個(gè)真實(shí)的壓力測試過程是怎樣的:

  通過應(yīng)用性能管理避免測試迭代

  Yes we can! 讓壓力測試充分發(fā)揮其能力

  這篇博客只是簡單的談到了我在客戶哪里遇到的問題的皮毛 ? 請查看Case Study we did with Novell,其中講到了Novell公司如何讓他們的測試吞吐量提高2-3倍的。過多的測試迭代和對應(yīng)用的黑盒測試視圖妨礙了我們讓壓力測試發(fā)揮更大的功效,應(yīng)用性能管理可以幫助我們使這個(gè)過程更高效。有興趣的話你可以下載完整版的How to Transform the Load Testing Process,它里面討論了更詳細(xì)的我們所說的問題,同時(shí)向我們展示了如何花少的時(shí)間做更多的測試。關(guān)鍵的要素是讓我們對應(yīng)用程序內(nèi)部可視化,能夠自動(dòng)的捕捉數(shù)據(jù)和分析數(shù)據(jù)。