JMeter 執行緒組學習筆記,關於能做效能測試的原因 - IT人

文章推薦指數: 80 %
投票人數:10人

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系統各個版本具體應用場景合集!



請為這篇文章評分?