概述
尖峰測試(Spike testing)在效能測試中屬於壓力測試的一個子集。指的是在某一瞬間或者多個頻次下使用者數和壓力陡然增加的場景。
為了驗證我們的網站在訪問使用者急劇增加的情況下,或者短時間內反覆急劇增加工作負載時能否正常工作;以及程式能否從高負荷中恢復並正常工作時常常用到這種測試手法。
Spike在英文中是釘子的意思,或者我們可以將其稱之為衝擊測試,反覆衝擊伺服器。
常見的場景有
12306開始售票時使用者急劇增加
網站公佈高考成績、錄取分數時,使用者急劇增加
網站投放商業促銷廣告和促銷活動,如雙11和618等活動開始時,使用者急劇增加
等等。。。。
現在我們假設有這樣一個場景
我們的網站正在平穩執行的時候,突然有一波1000使用者同時訪問,我們稱之為第一浪潮。訪問了30s之後,第一浪潮在15s內逐漸退出系統。
在第一浪潮退出系統的同時,第二波2000使用者在極短時間內又突然湧入網站,我們稱之為第二浪潮。在訪問30s之後,第二浪潮在15s內也逐漸退出了系統。
在第二浪潮退出系統的同時,第三波3000使用者又突然湧入網站,我們稱之為第三浪潮。在訪問30s之後,第三浪潮在15s內也逐漸退出了系統。
在第三浪潮退出系統的同時,第四波1000使用者又突然湧入網站,我們稱之為第四浪潮。在訪問30s之後,第四浪潮在15s內也逐漸退出了系統。
併發的使用者就像浪花一波一波的不斷湧入系統,拍打伺服器,考驗我們的系統能否頂住壓力並平穩執行
測試方案設計
我們知道,jmeter中的基礎執行緒組用來構成對伺服器的壓力。
我們在新增定時器之後,可以模擬出某一瞬間的壓力。
但是這種執行緒組只能模擬出一個尖峰,如果我們想要模擬出那種浪潮式的場景,它不能滿足我們的要求。
jmeter提供了另一個執行緒組滿足我們的測試需求
Ultimate Thread Group(終極執行緒組)
聽起來是不是有點高階?下面我們來了解一下它的用法
如圖所示
啟動的執行緒數量(Start Threads Count),也就是訪問的使用者數
延遲時間(Initial Delay,秒),也就是壓力到達的時間
執行緒啟動時間(Startup Time,秒),也就是為了滿足預期壓力而載入執行緒所需要的時間
壓力滿足之後持續執行的時間(Hold Load For,秒)
釋放掉壓力需要的時間(Shutdown Time,秒)
每一個Thread schedule 都是一個執行緒組。因此我們可以把這個終極執行緒組理解為多個基礎執行緒組的壓力疊加
圖中我們模擬出了四個spike場景
在第一批1000使用者訪問完畢的時候,第二批2000使用者的壓力又開始增加,第二批2000使用者壓力釋放之後,第三批3000使用者的壓力又開始增加。。。。
下圖是單位時間內活動的真實執行緒數,可以看出在中間兩個批次壓力下,執行緒根本來不及釋放掉
結合tps監聽和聚合報告可以看出,spike場景測試下,有很多事物沒有正確響應,錯誤率達到了20.78%