文章目錄
- 目錄
- 1. JMeter介紹
- 1.1 安裝JMeter
- 1.2 打開JMeter
- 1.3 JMeter基礎配置
- 1.4 JMeter基本使用流程
- 1.5 JMeter元件作用域和執行順序
- 2. 重點組件
- 2.1 線程組
- 2.2 HTTP取樣器
- 2.3 查看結果樹
- 2.4 HTTP請求默認值
- 2.5 JSON提取器
- 2.6 用戶定義的變量
- 2.7 JSON斷言
- 2.8 同步定時器(集合點)
- 2.9 事務控制器
- 2.10 常見監聽器
- 2.10.1 聚合報告
- 2.10.2 Response Times Over Time
- 2.10.3 Transactions per Second(TPS)
- 2.11 CSV數據文件設置
- 2.12 HTTP Cookie管理器
- 2.13 Jmeter插件
- 2.13.1 Stepping Thread Group
- 3. 測試報告
- 4. 性能分析
- 4.1 響應時間
- 4.2 錯誤率(可靠性)
- 4.3 吞吐量
目錄
- JMeter介紹
- 重點組件
- 測試報告
- 性能分析
1. JMeter介紹
環境要求:
Apache JMeter 是 Apache 組織基于 Java 開發的壓力測試工具,用于對軟件做性能測試
1.1 安裝JMeter
下載tar包,解壓即可:
解壓完成后:
1.2 打開JMeter
方式一:點擊bat文件
方式二:命令行啟動(推薦)
step1:添加JMeter系統環境變量
step2:保存后打開命令行工具
輸入命令jmeter即可啟動JMeter工具
1.3 JMeter基礎配置
修改字體為中文:
在jmeter的bin目錄下,修改文件中的內容:language=zh_CN
1.4 JMeter基本使用流程
補充:
- 兩個最常用的按鈕
- 運行前需要保存
- 啟動JMeter
- 在“測試計劃”下添加“線程組”
- 在“線程組”下添加“HTTP”取樣器
- 填寫“HTTP請求”的相關請求數據
- 在“線程組”下添加“查看結果樹”監聽器
- 點擊“啟動”按鈕運行,查看接口測試結果
1.5 JMeter元件作用域和執行順序
在JMeter中,元件的作用域和執行順序是非常重要的概念。
作用域:
JMeter元件的作用域主要由測試計劃的樹形結構中的元件父子關系來確定。
執行順序:
取樣器(sampler)元件內組件不依賴其他元件就可執行,因此取樣器不存在作用問題,元件作用域只對它的子節點有作用,其他作用域默認根據測試計劃中樹形結構來定。
2. 重點組件
2.1 線程組
控制JMeter將用于執行測試的線程數,也可以把一個線程理解為一個測試用戶。
2.2 HTTP取樣器
2.3 查看結果樹
注:
2.4 HTTP請求默認值
補充:
博客中涉及到的接口協議、IP、端口號全都一樣,可以單獨抽取出來存放在默認值中,其他接口就可以省略不寫協議、IP、端口號。
補充:
在測試博客列表頁時,當我們像博客登錄接口一樣,填寫了協議、IP、端口號、請求方法、路徑之后,會發現接口會報錯,是因為我們沒有在請求頭中添加登錄憑證。(因為只有登錄狀態下才能查看博客列表頁)
在Postman中加上之后是這樣的:
在Jmeter中:
但是我們現在給的登錄憑證是配置死的(會過期,或者換成其他用戶登錄就不行了),我們應該要給登錄接口返回的data值,接下來我們就來介紹如何實現。
2.5 JSON提取器
接口響應成功,通過提取返回值對應字段,可用于其他接口的參數配置
- 添加JSON提取器
JSON操作符參考:
- 添加JSON配置
- 配置json提取的參數
2.6 用戶定義的變量
添加方式:線程組 — 配置元件 — 用戶定義的變量
補充:
我們在測試發布博客接口時會遇到下面的問題:
2.7 JSON斷言
接口發送請求成功,響應碼為200并不能完全代表接口請求成功,我們更多需要關注接口響應數據是否符合預期。
- 添加JSON斷言
- 添加JSON配置
注意:
- 若不選Additionally assert value,表示添加斷言值,則可用來判斷字段是否存在
- 選擇Additionally assert value,則必須添加Expected Value期望的斷言值(精確匹配,區分大小寫)
- 若不選Match as regular expression正則匹配,則Expected Value必須填寫完整,少一個字符都會導致斷言失敗
- 若選擇Match as regular expression正則匹配,則Expected Value可以僅寫上部分關鍵詞即可斷言成功
2.8 同步定時器(集合點)
為了解決這個問題,達到并發的效果,我們可以添加同步計時器:
JMeter同步定時器的作用主要在于模擬多用戶并發訪問的場景,確保多個線程能夠同時執行某個操作,以達到真正的并發效果。
當多個線程同時啟動時,它們可能會在不同的時間間隔內執行,這樣就無法達到真正的并發效果。同步定時器的作用就是將這些線程的執行時間同步,使它們在同一時間點執行。它可以在多個線程之間制造一定的延遲,直到同時到達指定時間點,再同時執行后續的操作。
此外,同步定時器可以理解為集合點,當線程數量達到指定值后,再一起釋放,可以瞬間產生很大的壓力。這樣,可以更好地模擬真實的用戶并發訪問場景,提高測試的準確性和可靠性。
在性能測試過程中,為了真實模擬多個用戶同時進行操作以度量服務器的處理能力,可以使用同步定時器來設置集合點。不過,雖然通過加入集合點可以約束請求同時發送,但不能確保請求同時到達服務器,所以只能說是較真實模擬并發。
注:
2.9 事務控制器
JMeter事務控制器的作用主要用于測試執行嵌套測試元素所花費的總時間,這相當于模擬用戶進行一系列操作的測試。
在進行頁面性能測試或API性能測試時,事務控制器是一個非常重要的工具。它可以幫助測試人員更準確地評估系統性能,尤其是在涉及多個接口或操作的復雜場景中。例如,在訂單提交的過程中,可能需要調用多個接口,并且某些接口可能依賴于前一個接口的結果。在這種情況下,使用事務控制器可以將這些接口統一視為一個事務進行性能測試,從而得到更接近真實場景的性能測試結果。
若不添加事務控制器,則一個接口即一個事務。
添加了事務控制器后,可以將多個接口統一放到一個事務控制器下作為一個事務。
2.10 常見監聽器
2.10.1 聚合報告
從聚合報告可以看到性能測試過程中整體的數據變化。
2.10.2 Response Times Over Time
建議看完下面的監聽器插件后再看這里。
Response Times Over Time主要用于監聽整個事務運行期間的響應時間。在測試過程中,它可以幫助測試人員觀察并分析響應時間的實時平均值以及整體響應時間的走向。通過這一監聽器,測試人員能夠更直觀地了解系統在不同時間點的響應性能,從而發現可能存在的性能問題或瓶頸。
Response Times Over Time的圖形展示中,橫坐標通常代表運行時間,而縱坐標則代表響應時間(單位是毫秒)。測試人員可以根據圖形中的趨勢線來判斷響應時間的穩定性以及是否存在大的波動。例如,如果響應時間在某個時間點突然增加,這可能意味著系統在該時間點遇到了性能問題。
2.10.3 Transactions per Second(TPS)
建議看完下面的監聽器插件后再看這里。
JMeter中的 Transactions per Second(TPS)監聽器是一個用于分析系統吞吐量的重要工具。TPS,即每秒事務數,表示一個客戶機向服務器發送請求后服務器做出反應的過程。這個指標反映了系統在同一時間內處理業務的最大能力。TPS值越高,說明系統的處理能力越強。
在使用TPS監聽器時,橫坐標通常代表運行時間,而縱坐標則代表TPS值。通過監聽器展示的圖表,可以清晰地看到TPS值隨時間的變化情況。
2.11 CSV數據文件設置
以登陸接口為例,當我們執行登陸接口的性能測試時,手動配置了用戶名和密碼為固定的username和password,然而實際使用中不可能只有一個用戶登陸,為了模擬更真實的登錄環境,我們需要提供更多的用戶username和password來實現登錄操作。
添加方式:線程組?配置元件?CSV數據文件設置
操作步驟:
- CSV數據文件設置
- 文件名:填寫csv文件的路徑,建議使用絕對路徑
- 文件編碼:UTF-8
- 變量名稱:從csv數據文件中讀起的數據需要保存到的變量名,有多個變量時用逗號分隔
- 是否忽略首行:是否從csv數據文件第一行開始讀取
- 分隔符:要求與csv數據文件中多列的分隔符一致
- 遇到文件結束符再次循環:若選擇為True當數據不夠的時候會從頭取;若選擇False,則需要勾選下面的配置,遇到文件結束符停止線程,這里如果不勾選,請求將會報錯
- 編寫test.csv文件,示例:
- 修改登陸接口及其他涉及到username和password獲取的參數
修改完該配置后,登陸接口發起請求時將從csv文件中獲取配置好的username和password參數,獲取順序為從上往下依次獲取
- 修改線程組中線程數,使得每次取到的username和password都不一樣
- 運行結果
2.12 HTTP Cookie管理器
HTTP Cookie管理器像Web瀏覽器一樣存儲和發送Cookie。如果HTTP請求并且響應包含cookie,則Cookie管理器會自動存儲該cookie,并將其用于將來對該特定網站的所有請求。每個JMeter線程都有自己的“cookie存儲區”。因此,正在測試使用cookie存儲會話信息的網站,則每個JMeter線程都將擁有自己的會話,此類Cookie不會顯示在Cookie管理器顯示屏上,可以使用“查看結果樹監聽器”查看。
緩存配置可選擇standard(標準)或compatibility(兼容的),當然也可以手工添加一些cookie。
2.13 Jmeter插件
下載Jmeter插件功能:
將下載好的插件放到jmeter下lib/ext文件夾下:
此時,jmeter界面右上角將會展示一個小蝴蝶形狀的工具,該工具即jmeter插件功能,點擊該功能可以下載jmeter中支持的各種插件:
在真實企業壓測場景中,我們通常為一點一點的逐步增加線程數,因此需要安裝新的插件來支持線程數的配置。
通過插件管理工具下載其他插件:
- 在插件中下載其他監聽器插件
- 在插件中下載線程組插件
點擊Apply Changes and Restart JMeter等待下載完成并重啟JMeter:
下載完成后再線程和監聽器中可以看到新增的元件:
2.13.1 Stepping Thread Group
梯度壓測線程組
- This group will start:啟動多少個線程,同線程組中的線程數
- First, wait for:等待多少秒才開始壓測,一般默認為0
- Then start:一開始有多少個線程數,一般默認為0
- Next,add:下一次增加多少個線程數
- threads every:當前運行多長時間后再次啟動線程,即每一次線程啟動完成之后的的持續時間
- using ramp-up:啟動線程的時間;若設置為5秒,表示每次啟動線程都持續5秒
- then hold load for:線程全部啟動完之后持續運行多長時間
- finally,stop / threads every:多長時間釋放多少個線程;若設置為5個和1秒,表示持續負載結束之后每1秒鐘釋放5個線程
3. 測試報告
JMeter測試報告是一個全面而詳細的文檔,它提供了關于測試執行結果的詳細信息,幫助用戶全面評估系統的性能并進行性能優化。
生成性能測試報告的命令:
Jmeter -n -t 腳本文件 -l 日志文件 -e -o 目錄
-n : 無圖形化運行
-t : 被運行的腳本
-l : 將運行信息寫入日志文件,后綴為jtl的日志文件
-e : 生成測試報告
-o : 指定報告輸出目錄
注意: 日志文件和目錄可以不存在,若為已經存在的情況下需要保證內容為空,否則會出現錯誤!
正確演示示例:
性能測試報告生成成功后,在rizhi文件夾下將出現以下內容:
雙擊index.html文件,界面展示如下:
4. 性能分析
通過三大指標來分析性能問題
4.1 響應時間
如果響應時間超過了要求,代表系統到了瓶頸
注意事項:分析在多少線程的情況下發生了超標
響應時間變化的原因:
系統不穩定,有時快有時慢
隨著并發壓力變大而慢慢變慢,響應時間變高
4.2 錯誤率(可靠性)
?并發場景下,系統是否能夠正常處理業務
要求:99.99% 可靠:99.9999%
錯誤率高的原因:
接口請求錯誤
服務器無法繼續處理,達到了瓶頸(代碼寫的不好,內存泄漏、硬件資源等)
后端系統限流(系統里配置了不能超過多少并發)、熔斷、降級
什么是熔斷、降級?
熔斷:防止系統因某個服務的故障而整體崩潰。當電商平臺上用戶支付時,收銀臺發現某個支付渠道,如微信支付失敗率突增,超時嚴重,那么就可以臨時把這個支付方式熔斷掉
降級:主動關閉一些非核心功能,以確保核心功能的正常運行。某次騰訊視頻掛了的時候,用戶名稱默認顯示騰訊用戶,這也是一種降級方式,用兜底名稱做展示
4.3 吞吐量
吞吐量越大,性能越好;吞吐量相對穩定或者變低,可能系統達到了性能瓶頸
吞吐量變化規律:
波動很大:代表系統性能不穩定
慢慢變高,再趨于穩定:和并發量強相關。如果并發量小于吞吐量,慢慢增大并發量,吞吐量也會隨之增加
慢慢變低,并發量也減少了:要么說明性能測試要結束了,并發減少;也可能是系統變的卡頓,從而導致響應時間變慢,導致單個線程發起的并發量變少