JMeter 執行緒組學習筆記,關於能做效能測試的原因 - IT人
文章推薦指數: 80 %
JMeter 為什麼能做效能測試. 我們雖然都知道JMeter 使用執行緒在模擬使用者,但是它到底是怎麼模擬真實場景的?為什麼它就能做 ...
Togglenavigation
IT人
IT人
JMeter執行緒組學習筆記,關於能做效能測試的原因,編輯區選項,啟動時間大小設定
dongfanger發表於
2020-11-10
執行緒組,是說到JMeter會第一時間想到的東西,也是我認為JMeter最難理解的知識點。
因為專案讓你做個壓測,首先就是要考慮併發,用JMeter就是用多執行緒來模擬多併發。
但在看到執行緒組編輯區的時候,選項密密麻麻,無從下手呀。
本篇文章就給大家介紹JMeter執行緒組的玩法。
JMeter為什麼能做效能測試
我們雖然都知道JMeter使用執行緒在模擬使用者,但是它到底是怎麼模擬真實場景的?為什麼它就能做效能測試?
為了解答這些疑惑,我們從最簡單的登入壓測講起。
假設新專案要上線了,需要做個壓測,看看100個人同時登陸系統,效能怎麼樣。
我們先不用JMeter,先用人工來做。
找100個人,讓這些人把自己的賬號密碼輸好後,叫一聲,登入!他們就一起點選登入按鈕。
這樣就算效能測試了麼?不算。
而且這樣測的結果並沒有參考意義。
就算我們算出了此時登入介面響應時間是0.5s,那麼這0.5s也不能作為100個人同時登陸的響應時間。
學過統計學就知道,單個樣本資料是會有偏差的,在實驗中需要測量多次後取平均值,才能減少誤差。
然後我們用JMeter來做。
設定100個執行緒,模擬100個使用者,持續5分鐘,讓這100個執行緒不停的登入,產生成千上萬條併發請求。
假如登入比較慢或登入失敗了,使用者肯定會不停的點,就會造成持續不斷的請求。
JMeter的執行緒也可以設定無限迭代來模擬這一情況。
測試結束後,再對所有的大量的樣本資料,進行效能分析,得出平均響應時間、TPS、吞吐量等效能指標,以評估當前配置下系統效能情況,找到效能瓶頸,為效能優化提供依據。
這就是JMeter能做效能測試的原因,也是效能測試的意義。
知道了為什麼,接下來講講怎麼做。
如果設定不當,有可能100個執行緒只能產生1個併發請求。
JMeter的執行緒組編輯區如下:
Name
名稱,最好有業務意義。
Comments
註釋,可以為空。
ActiontobetakenafteraSamplererror
執行緒組中某個執行緒的請求出錯後,該怎麼處理。
有5個選項,Continue,StartNextThreadLoop,StopThread,StopTest,StopTestNow。
例如,假設有1個執行緒,包括2個取樣器,迭代執行2次:
Continue
請求出錯後,執行緒繼續執行。
為什麼要繼續執行呢?我們在大量使用者併發時,伺服器偶爾響應錯誤是正常現象,比如伺服器由於效能問題500,此時出錯我們正好要記錄下來,作為有效能問題的依據。
但是仍然可以繼續請求進行重試,說不定伺服器又能訪問了,這樣可以算出錯誤率。
比如,登入失敗了,那麼下單的操作由於登入失敗,也會跟著失敗。
預設選擇此項,保證足夠的併發壓力。
StartNextThreadLoop
如果出錯,則同一執行緒中的餘下請求將不再執行,直接重新開始新一輪迭代。
比如,登入失敗了,那麼下單的操作將不再執行,重新開始。
如果想減少關聯請求報錯,可以選擇此項。
StopThread
一般不會設定此項,它指的是請求失敗後,停止當前執行緒,不再執行。
這樣會導致執行執行緒越來越少,最後負載不夠,對伺服器的壓力不夠,測試結果不具參考性。
StopTest
如果某一執行緒的某一請求失敗了,停止所有執行緒測試。
但是每個執行緒還是會執行完當前迭代後再停止。
相當於Continue到當前迭代結束。
比如執行緒1正好執行到登入,有其他執行緒出錯了,執行緒1也會執行完下單操作才會停止。
StopTestNow
如果有執行緒的請求失敗了,立即停止所有執行緒,不再執行。
ThreadPropertiesNumberofThreads(users)
執行的執行緒數設定,一個執行緒對應一個模擬使用者。
Ramp-upperiod(seconds)
所有執行緒在多長時間內開始執行,單位是秒。
比如我們設定執行緒數為50,此處設定10秒,那麼每秒就會啟動50/10,5個執行緒。
如果設定為0秒,則50個執行緒會立刻啟動。
如果設定為100秒,就會每隔100/50,2秒啟動1個執行緒。
Ramp-upperiod的大小問題
Ramp-upperiod的大小問題,對於初學者來說是最容易困擾的。
以下是5個執行緒依次從啟動到執行退出的示意圖:
紅色框起來的部分才是真正5個執行緒併發請求的時間段。
假設我們設定20個執行緒,只執行1次迭代,看看不同的啟動時間設定會有結果有何不同。
如果啟動時間設定為0,那麼測試一開始就會產生20個併發請求,伺服器萬一只能承受15個併發,豈不是一上來就gg了,還測個什麼呀。
如果啟動時間設定為40,那麼會每隔2秒啟動1個執行緒。
萬一執行緒執行不到1秒就退出了,第2個執行緒啟動的時候,第1個執行緒已經退出了,不就是隻產生了1個併發請求麼。
那麼設定成多少合適呢?我也不知道,但是結合我查閱的資料,可以給出一個參考意見。
第一步,把執行緒組跑1次(可以線上程組元件上右鍵選擇Validate),從聚合報告獲取到吞吐量(Throughput)。
第二步,用執行緒數量除以吞吐量,得出啟動時間。
例如,200個執行緒,跑一次獲取到吞吐量為4/sec,啟動時間為200/4=50。
這樣設定以後,第2個執行緒啟動後,剛好第1個執行緒執行完開始新的迭代,從而形成梯度遞增的併發請求。
LoopCount
迭代次數。
可以填寫數字指定迭代次數。
也可以勾選Infinite,表示無限迭代,一直執行到測試停止或異常崩潰。
Sameuseroneachiteration
在JMeter中,user就是執行緒,此選項的意思是說每個迭代都用相同的執行緒。
這個得從老版本講起,在以前3.x和4.x版本的JMeter中,是沒有這個選項的。
建立好1個執行緒後,每次迭代都是用這個執行緒,直到測試結束。
它的影響就是,比如登入,加了HTTPCookie管理器以後,單個執行緒多次迭代(注意不是多個執行緒哦)登入用的都是相同的Cookie。
5.x版本加入了這個選項,可以控制每次迭代是否建立新的執行緒。
同時在HTTPCookie管理器也增加了一個選項,控制是否清除舊Cookie:
預設這個Sameuseroneachiteration的選項是勾選的。
因為銷燬和建立執行緒本身就會佔用資源,可能會影響效能測試結果。
DelayThreadcreationuntilneeded
跟JVM建立執行緒時機有關,實際運用勾不勾選都不影響測試結果,保持預設就好。
SpecifyThreadlifetime
Duration
持續時間,單位秒。
LoopCount勾選了Infinite,才有作用。
Startupdelay
啟動延遲,單位秒。
延遲到時間後再執行執行緒。
簡單回顧
本文首先解析了JMeter為什麼能做效能測試的原因,接著對執行緒組編輯區的選擇進行了講解,重點梳理了Ramp-upperiod的大小問題。
此外,JMeterPlugins還提供了兩個執行緒組元件UltimateThreadGroup與SteppingThreadGroup,以滿足浪湧(波濤狀,多個波峰)的場景。
筆者水平有限,若有錯誤,請指正。
參考資料:1.《全棧效能測試修煉寶典JMeter實戰》
2.https://www.cnblogs.com/hjhsysu/p/9189897.html
相關文章
com.alibaba.fastjson學習筆記
2020-11-21
使用Actor模型管理WebWorker多執行緒
2020-11-21
用React.js+Egg.js造輪子全棧開發旅遊電商應用學習筆記和心得
2020-11-21
全棧React
集合框架與執行緒安全解決
2020-11-22
框架
JVM找出佔用CPU最高的執行緒
2020-11-22
JVMCPU
開源工具,從此告別產品原型檔案,編寫測試用例竟省了半小時!!!
2020-11-22
MySQL時間戳的獲取&轉換為特定時間格式
2020-11-22
MySQL
關於elementuiinput標籤的改造樣式
2020-11-22
ThreadPoolExecutor原始碼分析-面試問爛了的Java執行緒池執行流程,如果要問你具體的執行細節,你還會嗎?
2020-11-22
Java面試
laravelschedulerun任務排程在Windows下的另一種啟動方式
2020-11-22
Laravel
《吳恩達機器學習》學習筆記007_支援向量機
2020-11-22
MachineLearning
HeadFirstJava學習筆記(7):繼承與多型
2020-11-22
Java
執行緒池知識點詳解
2020-11-22
JavaScript正則學習筆記
2020-11-22
JavaScript
小白不懂就問,學自動化測試,會Java可以嗎,還是必須得會python(python不太會)
2020-11-22
PythonJava自動化測試
docker網路問題解決辦法“大全”:關於宿主機訪問不了docker容器中web服務,或者容器內訪問不了外網的問題的解決辦法
2020-11-22
Docker
讓面試官心服口服:Thread.sleep、synchronized、LockSupport.park的執行緒阻塞有何區別?
2020-11-22
面試
AndroidContentProvider啟動分析
2020-11-22
Android
自定義springboot啟動器
2020-11-22
Spring
最新文章
PHP高階特性-反射Reflection以及Factory工廠設計模式的結合使用[程式碼例項]
InfluxDB簡介與php用法
網易面試官:請你實現一下JS過載?可不是TS過載哦!
實戰|如何使用雲開發實現照片附件上傳開發
TiDB資料一致性校驗實現:Sync-diff-inspector優化方案
Stupid&&祖傳Fortran程式碼救贖之路(編譯Dll)
讀書APP原始碼,搜尋欄模糊處理實現
FOMOPay銀行賬戶使用者區塊鏈可以嗎?
盤點Linux作業系統的六大特點!
homestead多版本編譯安裝swoole
4D數字影院中常見的幾種特效座椅介紹
Linux系統各個版本具體應用場景合集!
延伸文章資訊
- 1系統壓力測試計畫-使用JMETER工具 - TPIsoftware
1. 前言. 本文介紹依據某系統專案制定簡易的效能測試計畫,並搭配使用JMETER工具針對【瞬間登入:壓力測試】設定以進行系統效能測試 (Performance Test)。
- 2測試效能工具- JMeter
JMeter是由Apache這個團隊所發明的壓力測試套件,它是用Java所撰寫的,因此可以在不同的OS平台中運行,是沒有問題的。它最常被用來測試Web方面的,除此之 ...
- 3JMeter效能測試,完整入門篇 - 程式前沿
1. Jmeter簡介Apache JMeter是一款純java編寫負載功能測試和效能測試開源工具軟體。相比Loadrunner而言,JMeter小巧輕便且免費,逐漸成為了主流的效能 ...
- 4效能測試實務與工具Jmeter應用
8 Redmine效能測試與伺服器監控 ... JMeter以Java開發,用於Web應用程式功能和效能測試。 ... 使用者手冊: http://jmeter.apache.org/userm...
- 5JMeter 執行緒組學習筆記,關於能做效能測試的原因 - IT人
JMeter 為什麼能做效能測試. 我們雖然都知道JMeter 使用執行緒在模擬使用者,但是它到底是怎麼模擬真實場景的?為什麼它就能做 ...