概述
尖峰測試(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%


