為何要在效能測試中設定考慮時間

2022-05-08 14:15:08 字數 1314 閱讀 9076

考慮時間thinking time指的是在效能測試指令碼中,事務與事務之間,會有一些短暫的停頓,就好像真實使用者在操作時,兩次操作之間需要考慮一下。比如使用者註冊的時候,在開啟註冊頁面到提交註冊頁面之間,是有一段考慮時間的(使用者在填寫個人資訊)。

下面就討論一下在效能測試實戰中,為什麼要設定考慮時間。

先說乙個概念:吞吐量,這指的是伺服器系統(包括軟體和硬體)單位時間內處理業務的數量。我們現在做乙個小試驗,寫乙個小程式,執行乙個簡單的業務,並且在程式中進行計時,計算每分鐘能執行多少次。然後當我們執行1路這個程式的時候,每分鐘能完成約6萬次。好,現在問乙個問題,如果我們起2路,是不是每一路都能達到 6萬/分鐘 的吞吐量?

試驗發現,當執行2路的時候,兩個程式的數值都降了下來,但是它們的總和仍然是6萬次。而且不管我們起多少路,這些程式的效能總和都接近於6萬。

這就好像乙個人1分鐘最快能吃1個饅頭,你讓他乙個乙個吃,他兩分鐘能吃2個,如果你讓他一手拿乙個,同時吃,他兩分鐘吃不了4個,還是只能吃兩個。

我們不是在說「考慮時間」麼,哈哈,別急,因為上面的問題必須要先說清楚。

如果我們需要進行效能測試的業務是乙個單純的業務,就好像上面舉的那個例子一樣,那麼測試指令碼中就不需要設定「考慮時間」,因為不管你用什麼方法測試,乙個服務系統處理單一業務的吞吐量總是乙個定值。

但是在實際環境裡面,往往乙個系統都是要處理多種業務,並且這些業務之間是有邏輯關係的。舉例說明,比如乙個論壇系統,每天最常處理的業務有兩個:a開啟帖子、b回覆帖子。那麼每天系統處理ab業務的總數是不是一樣的呢,答案很明顯,看帖子多,回覆的少一些。假設a:b=2:1。

好,如果我們不設定考慮時間,起2路a的指令碼,1路b的指令碼進行效能測試,我們會得到什麼結果呢?我們會得到這兩個業務的吞吐量,並且能算出每個小時系統完成a、b業務的總數,吞吐量 × 時間 = 總數。

這時我們發現,同樣時間,ab業務的處理總數卻不是2:1的關係,這是為什麼呢?原因是這樣的,我們在跑ab指令碼的時候,這兩組指令碼都在盡全力爭奪伺服器的資源,他們的併發路數雖然是2:1,但是給伺服器的壓力卻不一定是2:1,可能會出現偏差,測試結果就是最好的證據。a檢視帖子由於響應時間短,因此跑的次數更多,最後的比例可能是4:1。

那麼這樣的結果有什麼問題呢。總結為一句話:測試環境的業務和真實環境不符,這樣測出的資料沒有價值。即使測試通過,也不能證明真實環境是ok的;或者即使測試不通過,也不能說明真實環境不ok,呵呵。

比如上面的例子,如果我們測出的結果是b回覆帖子的吞吐量不夠,響應時間太長,那可能是因為a業務搶走了過多的,本不屬於a的資源,而引起了b的效能降低。

說到這裡,大家應該明白了,我們設定考慮時間,是為了保證測試復合業務的時候,各個業務之間的比例關係符合我們的真實生產環境。

效能測試基礎 LR執行設定

lr的執行時設定 runtime settings run logic 該選項是用來控制指令碼的真正的執行邏輯。該選項會把指令碼中的函式分別放入三個執行模組中 init run end 預設情況下,vuer init函式會放在init部分 vuser end會放在end部分。其他acthon函式會按...

為何在font family屬性中設定多個值

通常前端開發中會對body標籤中設定font family屬性多個值,例如 body 其實設定多個值的意思是 若使用者電腦未安裝第一種字型microsoft yahei 微軟雅黑 則執行第二個字型,以此類推。最後申明的sans serif,專指西文中沒有襯線的字型,與漢字字型中的黑體相對應。注意 對...

效能測試中JVM full GC分析

0.什麼是gc?gc用於跟蹤記憶體中的物件,並 哪些不再被其他物件引用的物件 記憶體中的物件型別分活動物件 當前正被其他物件引用的物件 和非活動物件 這類物件不再被其他物件所引用,是孤立的物件。這類物件可以 的堆空間用於分配給其他新建立的物件 1.gc觸發的條件 系統空閒 gc執行緒優先順序低於系統...