一、首先了解一下什麼是Apache JMeter?
Apache JMeter是Apache組織開發的基於Java的壓力測試工具,用於對軟件做壓力測試,它最初被設計用於Web應用測試但後來擴展到其他測試領域。它可以用於測試靜態和動態資源,例如:靜態文件、Java小服務程序、CGI腳本、Java 對象、數據庫, FTP服務器, 等等。JMeter 可以用於對服務器、網絡或對象模擬巨大的負載,來在不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter能夠對應用程序做功能迴歸測試,通過創建帶有斷言的腳本來驗證你的程序是否返回了期望的結果,為了最大限度的靈活性,JMeter允許使用正則表達式創建斷言。
迴歸測試:迴歸測試是指修改了舊代碼後,重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。
JMeter元素
1、Test Plan:測試計劃,用來描述一個性能測試,包含與本次性能測試所有相關的功能。也就說本次性能測試的所有內容都是基於一個計劃的。
2、Threads(Users):線程(用戶)
(1)setup thread group:可用於執行預測試操作。這些類型的線程執行測試前進行定期線程組的執行。
(2)teardown thread group:可用於執行測試後動作。這些類型的線程執行測試結束後執行定期的線程組。
(3)thread group(線程組):測試時運行的線程。通俗的講一個線程組,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。線程組中包含的線程數量在測試執行過程中是不會發生改變的。
線程屬性:
Numbers of Threads(users):線程數量(模擬用戶數量)。
Ramp-Up Period(in seconds):指定了啟動所有線程所花費的時間,單位是秒,默認時間是1秒。如果你需要Jmeter立即啟動所有線程,將此設定為0即可。
Loop Count:循環次數,表示每個線程執行多少次請求。 Forever表示永遠循環,除非手動停止。
3、Sampler:取樣器,是每一個測試計劃的基本要素,一切都圍繞這些採樣器而工作:採樣器執行請求(基於配置的請求),這些請求產生一個或多個響應,後續將被分析。
4、Listeners:監聽器,負責收集測試結果(對取樣器的請求結果顯示、統計一些數據:吞吐量、KB/S……等),同時也被告知了結果顯示的方式。監聽器以報表、樹型結構、或簡明的日誌文件的形式分析結果。
5、Assertions:斷言,保證性能測試過程中的數據交互與預期保持一致。
6、Timers:定時器,負責定義請求(線程)之間的延遲間隔,模擬對服務器的連續請求。用於操作之間設置等待時間,等待時間是性能測試中常用的控制客戶端QPS的手段。如果不指定,JMeter會一個請求(線程)完成後立即執行下一個請求(線程),沒有任何等待時間。
7、Logic Controllers:邏輯控制器允許自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模擬複雜的請求序列。
8、PreProcessor/PostProcessor:前置處理器和後置處理器負責在生成請求之前和之後完成工作。前置處理器常常用來修改請求的設置,後置處理器則常常用來處理響應的數據。
9、Config Element:使用配置元素你可以將不同的參數傳遞給取樣器請求。他們提供了創建變量的一種方式,這些參數之後被採樣器所使用。在採樣器被執行前,參數所屬節點啟動時,這些參數被執行;這就是為什麼採樣器可以依賴這些變量。
測試計劃元素執行順序
1–Config Element 配置節點
2–Pre-Processors 前置處理器
3–Timers 定時器
4–Sampler 取樣器
5–Post-Processors 後置處理器(只在有結果可用情況下執行)
6–Assertions 斷言(只在有結果可用情況下執行)
7–Listeners 監聽器(只在有結果可用情況下執行)
取樣器之聚合報告
一般情況下我們在壓測時使用的取樣器為聚合報告(Aggregate Report)
Label:每個Jmeter的element(例如HTTP request)都有一個name屬性,這裡顯示的就是name屬性的值
#Samples:表示本次測試中共發出了多少次請求,如果模擬10個用戶,每個用戶循環10次,那麼這裡顯示100
Average:平均響應時間————默認情況下是單個Request的平均響應時間。(當使用了Transaction Controller時,也可以以Transaction為單位顯示平均響應時間)
Median:中位數,也就是50%用戶的響應時間
90%line、95%line、99%line:先明確一下xx%line的含義,即百分位,如果100個請求按時間升序排列,我是第90個,那麼我請求的時間就是90%,翻譯過來就是有90%的數據花費的時間比我的少(也就是90%請求響應時間不會超過多少秒),這個指標代表了高併發情況下大部分用戶的體驗值
Min、Max:最短耗時和最長耗時,以上時間均以毫秒位單位
Error%:本次測試過程中出現的錯誤請求數量/請求的總數
Throughput(TPS):吞吐量,每秒鐘處理請求的次數。也就是指服務器處理能力,tps越高說明服務器處理能力越好
Recieved KB/sec:獲得的數據量
Send KB/sec:發送的數據量
比較重要的是90% line、Error%、Throughput。我們在做壓力測試的時候要根據服務器和網頁的實際情況,不只根據數據還要根據服務器的性能來做出各種調整,需要注意的是不是TPS越高越好,也不是90% line越快越好,因為這無法代表你服務器的最佳狀態,參數需要多次調式之後才能獲得正確的聚合報告。
90%Line引發的問題?
百分位數:統計學術語,如果將一組數據從大到小排序,並計算相應的累計百分位,則某一百分位所對應數據的值就稱為這一百分位的百分位數。可表示為:一組n個觀測值按數值大小排列如,處於p%位置的值稱第p百分位數。
一個?:
高等院校的入學考試成績經常以百分位數的形式報告。比如,假設某個考生在入學考試中的語文部分的原始分數為54分。相對於參加同一考試的其他學生來說,他的成績如何並不容易知道。但是如果原始分數54分恰好對應的是第70百分位數,我們就能知道大約70%的學生的考分比他低,而約30%的學生考分比他高。
假如:
有10個數:1、2、3、4、5、6、7、8、9、10 按由大到小將其排列,求它的第90%百分位,也就是第9個數剛好是9 ,那麼他的90%Line 就是9 。
另一組數:
2、2.1、2.5、3、3.4、3.4、4、4、4、4、5、5、5、5.9、5.91、6.8、8、12、24、24.1 按由大到小將其排列,求它的第90%百分位,第18個數是12,他的90%Line 就是12。
再來解釋90%Line :一組數由小到大進行排列,找到他的第90%個數(假如是12),那麼這個數組中有90%的數將小於等於12。用在性能測試的響應時間也將非常有意義,也就是90%請求響應時間不會超過12 秒。