作為應(yīng)用開發(fā)者,我們到底該如何建立一項(xiàng)性能測(cè)試規(guī)劃?
譯文【51CTO.com快譯】所謂制定性能測(cè)試規(guī)劃,并不單純只是整理出一篇指導(dǎo)文檔,而應(yīng)深入考量以確保能夠通過(guò)最少的執(zhí)行步驟回答關(guān)于系統(tǒng)性能的種種問題。
首先,我們有必要了解測(cè)試結(jié)果需要用于回答哪些問題。以下是部分常見示例:
- 壓力測(cè)試:系統(tǒng)能夠承受且提供可接受用戶體驗(yàn)的***并發(fā)用戶數(shù)量是多少?拐點(diǎn)在哪里?
- 負(fù)載測(cè)試:在當(dāng)前系統(tǒng)負(fù)載場(chǎng)景下,應(yīng)用程序表現(xiàn)如何?是否能夠?qū)崿F(xiàn)進(jìn)一步改善?
- 持久性測(cè)試:在運(yùn)行一段時(shí)間后,系統(tǒng)工作效果如何?(有時(shí)我們需要每晚重啟服務(wù)器,直到找出解決性能逐步下降的根本原因。)
- 峰值測(cè)試:如果正常運(yùn)行的系統(tǒng)被突如其來(lái)的峰值壓垮,我們需要多長(zhǎng)時(shí)間才能完成系統(tǒng)恢復(fù)?
另外,在性能測(cè)試規(guī)劃當(dāng)中,我們還應(yīng)當(dāng)對(duì)自身能力進(jìn)行考量:
團(tuán)隊(duì)是否準(zhǔn)備好應(yīng)對(duì)此類突發(fā)狀況?或者還需要進(jìn)行額外培訓(xùn)?
我們能夠以怎樣的速度找到性能問題的解決辦法?
我們已經(jīng)具備哪些物理資源?不具備的部分存在怎樣的獲取難度?
帶著這些問題,我們即可有針對(duì)性地對(duì)系統(tǒng)進(jìn)行審查,并思考如何加以改進(jìn)。
為了控制篇幅,今天我們只專注于其中一項(xiàng)議題:在明確了預(yù)期負(fù)載后,我們?cè)撊绾芜\(yùn)行準(zhǔn)確的對(duì)應(yīng)負(fù)載場(chǎng)景?
性能測(cè)試規(guī)劃:并發(fā)用戶數(shù)量
這里需要再次強(qiáng)調(diào):我們無(wú)法在測(cè)試起步時(shí)即模擬全部并發(fā)用戶。在這種情況下,一定會(huì)同時(shí)出現(xiàn)多種問題,而我們很難弄清其真正根源。因此大家應(yīng)當(dāng)以迭代方式不斷提升負(fù)載強(qiáng)度,并在過(guò)程中觀察所出現(xiàn)的問題。
- 示例:負(fù)載測(cè)試
現(xiàn)在,我們假定需要測(cè)試當(dāng)前系統(tǒng)能否支持1000名并發(fā)用戶。
1.首測(cè):1用戶,無(wú)并發(fā)。我們將此作為基準(zhǔn),當(dāng)然大家也可以選擇5用戶或者10用戶,但請(qǐng)確保具體數(shù)字遠(yuǎn)低于預(yù)期水平。
2.二測(cè):200并發(fā)用戶(或者預(yù)期負(fù)載的20%)?,F(xiàn)在我們將能夠得到大量信息,其將最終決定測(cè)試過(guò)程是否順利。
在初始測(cè)試時(shí),我們首先解決重要問題與默認(rèn)配置(連接池?cái)?shù)或者Java堆大小等),借此了解如何將響應(yīng)時(shí)間與基準(zhǔn)水平進(jìn)行比較。在分析與故障排查完成后,我們?cè)俅沃貜?fù)這一測(cè)試,直到得出可接受的時(shí)間。
根據(jù)實(shí)際結(jié)果,我們考慮在第三次測(cè)試中使用40%負(fù)載強(qiáng)度(以20%作為基礎(chǔ)增量)還是50%(接下來(lái)為75%和100%)進(jìn)行實(shí)驗(yàn)。無(wú)論如何選擇,我們都能在過(guò)程中了解到系統(tǒng)的響應(yīng)時(shí)間變化,并掌握其隨負(fù)載提升所產(chǎn)生的變化。
在本示例中,我們將20%作為增量。另外,我們會(huì)重復(fù)測(cè)試直到在各種負(fù)載強(qiáng)度下達(dá)到符合預(yù)期的SLA,之后再進(jìn)行新一輪增量。
- 示例:壓力測(cè)試
在第二項(xiàng)示例中,我們希望利用壓力測(cè)試找到系統(tǒng)的性能拐點(diǎn)。這意味著我們要增加用戶數(shù)量并分析其是否會(huì)同步帶來(lái)通量增加。一旦并發(fā)量增加但通量不變,則意味著我們到達(dá)了拐點(diǎn),這時(shí)系統(tǒng)已經(jīng)達(dá)到飽和狀態(tài)。
這里我們***采取所謂探索性能測(cè)試,即假設(shè)拐點(diǎn)一定存在于1000并發(fā)用戶以內(nèi)的區(qū)間。
目前各類負(fù)載模擬工具皆可隨時(shí)間推移進(jìn)行負(fù)載量提升,例如在開始測(cè)試時(shí)為0并發(fā)用戶,到1小時(shí)時(shí)則為1000并發(fā)用戶。如此一來(lái),我們即可觀察系統(tǒng)通量何時(shí)發(fā)生下降。假設(shè)拐點(diǎn)出現(xiàn)在約650并發(fā)用戶,則我們可以進(jìn)一步細(xì)化以確定準(zhǔn)確的拐點(diǎn)位置。
- 示例:持久性測(cè)試
在持久性測(cè)試中,我們?cè)诳山邮軛l件下運(yùn)行一項(xiàng)恒定負(fù)載,例如在***容量的50%到70%之間。當(dāng)然,具體情況視您的實(shí)際系統(tǒng)場(chǎng)景而定。
一般來(lái)講,此類測(cè)試應(yīng)在壓力或負(fù)載測(cè)試之后進(jìn)行,用以發(fā)現(xiàn)其它類型的問題(例如內(nèi)存泄漏與掛起連接等)。如果有時(shí)間,大家可以延長(zhǎng)測(cè)試周期以發(fā)現(xiàn)更多問題。
- 示例:峰值測(cè)試
正如之前提到,峰值測(cè)試的意義在于了解系統(tǒng)能夠以怎樣的速度實(shí)現(xiàn)恢復(fù)。在這里,我們可以嘗試設(shè)置1分鐘的流量峰值,而后降低負(fù)載,觀察系統(tǒng)能否正確響應(yīng)或者將請(qǐng)求暫時(shí)掛起。
當(dāng)然,大家也可以先嘗試建立小型峰值,而后再逐步加大強(qiáng)度以研究系統(tǒng)的實(shí)際反應(yīng)。需要強(qiáng)調(diào)的是,相關(guān)模擬請(qǐng)盡可能與用戶行為的分析結(jié)論相對(duì)應(yīng),特別是基于相關(guān)日志信息。
總結(jié)
性能測(cè)試規(guī)劃的具體設(shè)計(jì)取決于您希望從中回答的實(shí)際問題,但其共同點(diǎn)在于,我們需要盡可能減少測(cè)試次數(shù)、優(yōu)化測(cè)試成本并提升收益。因此,迭代式增量(用于負(fù)載、持久性與峰值測(cè)試)以及細(xì)粒度(用于壓力測(cè)試)方法無(wú)疑值得大家加以嘗試。
原文標(biāo)題:How to Make a Performance Test Plan
原文作者:Federico Toledo
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】