a.效能需求分析
挑選使用者使用最頻繁的功能來做測試,比如:登陸,搜尋,提交訂單
確定效能指標,比如:事務通過率為100%;90%的事務響應時間不超過5秒;並行使用者為1000人時CPU和記憶體的使用率在70%以下
b.效能測試計劃
確測試時間和測試環境和測試工具的選擇
註明測試通過指標以及業務場景
準備效能測試資料
c.搭建效能測試環境
注意這裡測試環境一定要和線上正式環境保持一致
d.通過效能測試用例,編寫效能測試指令碼,準備效能測試資料
效能測試指令碼進行調優,設定檢查點、引數化、關聯、集合點、事務,調整思考時間
e.設計效能測試場景,監控伺服器,執行測試場景
f.分析效能測試結果,判斷效能瓶頸,反饋結果資訊
g.迴歸效能測試
h.編寫效能測試報告
a、基準測試
基準最簡單的理解就是有基礎的標準,這樣能通過對比發現系統的不同的與變化。一般情況下,基準測試有以下幾種應用場景。
1)可以在指定的標準下通過基準測試建立一個效能基準,這樣以後當系統的環境、引數傳送變化之後,在進行一次相同標準下的測試,即可看出變化對效能的影響。例如,資料庫的基準效能測試。
2)系統進行基準測試可以在較早的階段發現效能問題。例如,如果對BestTest論壇進行10個使用者並行測試時,系統出現了宕機現象,那麼就沒比較進行後續測試。
3)某系統從來沒有進行過任何效能測試,需要對該系統做一次效能評估作為後續開發調優的參考。這是基準測試常見的一種場景,也是大部分沒有做過效能測試的公司最需要的。
基準測試不難理解,但實踐起來常常被誤解。以對某個系統的資料搜尋進行效能基準測試用例,這個系統的資料量會隨著時間的增長而增長,所以必須頻繁地進但行基準測試,這樣子才能準確地把握資料量的增長對系統效能的影響。但是進行的基礎測試又恰恰是在應用程式級別的,並不能客觀地反應全域性的效能。所以,比較好的做法是每次只修改一個地方,這樣就能準確地判斷出那個地方會對效能產生影響。
b、並行測試
並行測試是值通過模擬多個使用者並行存取同一個應用、儲存過程或資料記錄及其他並行操作,測試是否存在死鎖、資料錯誤等故障。為了避免資料庫或者函數方法在並行下的錯誤,需要專門針對每個模組進行並行測試。
並行數如何確定?
並行數 = PV/PVTime 頁面連線次數 HTTP響應時間 * 因數/Web伺服器數量。
其中,PVTime是PV的統計時間,換算成秒,一天是86400s。頁面連線次數包括外部的JS、CSS、圖片等,一般為10。HTTP響應時間一般為1s或更少。因數一般為5。
假設,BestTest官網每天有6萬PV,其餘引數保持預設,那麼推算出來的並行數大致為35
注意**:PV(page view)即頁面瀏覽量。一個使用者有可能創造十幾個甚至更多的PV。它是目前判斷網站存取流量最常見的計算方式,也是反映一個網站受歡迎程度的重要指標。
3、負載測試
負載測試是值在一定的軟體、硬體及網路環境下,執行一種或多種業務,在不同虛擬使用者數量的情況下,測試伺服器的效能指標是否在使用者的要求範圍內,以此確定系統所能承受的最大使用者數、最大有效使用者數以及不同使用者數下的系統響應時間及伺服器的資源利用率。
負載測試強調的是在一定的環境下系統能夠達到的峰值指標,大多數的效能測試都是負載測試。例如:在各大網站上看到的各種顯示卡測試,都是通過執行3DMark或者某種遊戲得到的最終資料,通過這個資料來說明顯示卡的峰值處理能力,這就是負載測試的一種。
4、壓力測試
壓力測試是指在一定的軟體、硬體及網路環境下,模擬大量的虛擬使用者數向伺服器產生負載,使伺服器的資源處於極限狀態下並長時間連續執行,以測試伺服器在高負載情況下是否能夠穩定工作。
與負載測試獲得峰值效能資料不同,壓力測試強調在極端情況下系統的穩定性,這個時候出來能力已經不重要了。
什麼是思考時間?
思考時間(Think Time)也稱為「休眠時間」,是指使用者在進行操作時,每個請求之間的時間間隔。對於互動系統來說,使用者不可能持續不斷地發出請求,一般情況下,使用者在向伺服器端傳送一個請求後,會等待一段時間再傳送下一個請求。效能測試過程中,為了模擬這個過程而引入思考時間的概念。在測試指令碼中,思考時間為指令碼中兩條請求語句之間的間隔時間。當前對於不同的效能測試工具提供了不同的函數來實現思考時間。
jmeter定時器詳解(常見的兩種)
1、固定定時器Constant Timer
需要讓每個執行緒在請求之前按相同的指定時間停頓,就可以使用這個定時器;需要注意的是,固定定時器的延時不會計入單個sampler的響應時間,但會計入事務控制器的時間
2、統一隨機定時器Uniform Random Timer
該計時器將每個執行緒請求暫停一個隨機的時間量,每個時間間隔的發生概率相同。總的延時等於隨機延時 + 偏移延時值。
Random Delay Maximum(in milliseconds):隨機延遲最大值(以毫秒為單位)
Constant Delay Offset(in milliseconds):恆定延遲偏移量(以毫秒為單位)
什麼是引數化?
業務中指令碼中有登入操作,需要輸入使用者名稱和密碼,假如系統不允許相同的使用者名稱和密碼同時登入,或者想更好的模擬多個使用者來登入系統。這個時候就需要對使用者名稱和密碼進行引數化,使每個虛擬使用者都使用不同的使用者名稱和密碼進行存取。
引數的不同方式
jmeter中引數化方式很多,以下講解兩種常見的引數化方式
方式一:接著在之前建立的指令碼的基礎上,右鍵點選 設定元件---->CSV Date Set Config 推薦使用
方式二:使用函數助手進行引數化
什麼是Jmeter關聯,為什麼需要關聯?
由於效能測試是基於介面的,HTTP協定是無狀態的,為了解決這個問題就有session和token的方式,在一般登入後伺服器生成之後,後續請求就需要攜帶session或者token的值,而我們這裡所說的關聯其實就是使用獲取到伺服器響應中的session或者token為後續請求新增的過程,但是在有時候有的系統中還存在一些動態的值也是需要關聯的,例如時間戳、一些特殊的驗證欄位等
那麼Jmeter如何實現關聯呢?常見的session和token
在jmeter中使用 後置處理器--->正規表示式提取器 實現關聯的
需要在當前事物控制器,新增HTTP cookie管理器
為什需要集合點,集合點有什麼作用?
雖然我們的「效能測試」理解為「多使用者並行測試」,但真正的並行是不存在的,為了更真實的實現並行的操作,我們可以在需要壓力的地方設定集合點。以登入功能為例,每到輸入使用者名稱和密碼登入的地方,所有的虛擬使用者都相互之間等一等,然後一起存取,這樣對伺服器的衝擊力更大,例如:可以在秒殺、搶購等高並行場景使用
jmeter集合點設定
步驟一:接著在之前建立的指令碼的基礎上,右鍵點選 HTTP請求---->定時器---->Synchronizing Timer
步驟二: 設定集合點
Number of Simulated Users to Group by(虛擬使用者組的數量): 每次釋放的執行緒數量(例如:可以設定有50個需要使用者一起開始登陸)。如果設定為0,等同於執行緒組中設定的執行緒數量。
Timeout in milliseconds(超時時間,以毫秒為單位): 如果設定為0,Timer將會等待執行緒數達到了"Number of Simultaneous Users to Group"中設定的值才釋放。如果大於0,那麼超過Timeout in milliseconds中設定的最大等待時間(毫秒為單位)後還沒達 到"Number of Simultaneous Users to Group"中設定的值,Timer將不再等待,釋放已到達的執行緒
命令列介面直接執行指令碼生成
可以通過如下命令,一次性完成測試執行和生成HTML視覺化報告的操作,進入jmeter的bin目錄下,輸入如下命令:
複製程式碼
D:\tools\apache-jmeter-5.3\bin\jmeter.bat -n -t E:\效能測試指令碼\蝸牛Boss.jmx -e -o D:\re -l login.log
-n:以非GUI形式執行Jmeter
-t:source.jmx 指令碼路徑
-l:記錄樣本到文字,可以看成紀錄檔,檔名為.log即可
-e:在指令碼執行結束後生成html報告
-o:用於存放html報告的目錄
因為jmeter本身是採用java開發的,比較消耗系統效能,如果採用圖形化介面進行測試場景的執行,會作業系統產生的壓力值偏小
1、平均響應時間:響應時間越短越好
2、吞吐量:吞吐量反映的就是業務的處理能力,越大越好
a.HPS:每秒鐘點選數(可以直觀的理解為每秒鐘可以發出多個HTTP請求),單位次/秒 ,
b.TPS:每次中能夠完成業務交易的次數,單位是筆/每秒
c.QPS:每秒鐘能夠處理查詢的次數,單位是次/秒
3、資源利用率
CPU:不能超過75%
記憶體:記憶體中swap交換區間的使用完成意味著,實體記憶體耗盡,一般要避免這種情況,實體記憶體使用不要超過80%
磁碟:磁碟繁忙率要低於70%。
網路:頻寬使用率不能超過70%。
1.jmeter serveragen監控伺服器
2.Linux中top命令監控
3.監控工具 spolight