JMeter 性能測試實戰筆記
本文檔是一份詳細的 JMeter 指南,涵蓋了從創建測試計劃、執行測試到解讀性能結果的全過程。
一、創建測試計劃
一個完整的測試計劃是執行性能測試的基礎。下面將分步介紹如何創建一個針對文件上傳接口的測試場景。
第一步:添加線程組 (定義并發用戶)
“線程組”是用來模擬并發用戶的核心元件。它決定了有多少個“虛擬用戶”同時去請求您的服務。
- 在左側的樹狀視圖中,用鼠標右鍵點擊
▲ Test Plan
。 - 在彈出的菜單中,依次選擇
添加 (Add)
->線程 (Users)
->線程組 (Thread Group)
。 - 點擊新創建的
線程組
,您會在右側看到它的配置選項。請按照如下計劃來填寫:- 線程數 (Number of Threads):
20
(模擬20個并發用戶) - Ramp-up Period (in seconds):
10
(在10秒內讓這20個用戶全部啟動) - 循環次數 (Loop Count):
100
(每個用戶重復請求100次) - 也可以設置一段時間
- 線程數 (Number of Threads):
第二步:添加 HTTP 請求 (定義要測試的接口)
現在我們需要告訴 JMeter,這些虛擬用戶具體要請求哪個接口。
- 在左側的樹狀視圖中,右鍵點擊您剛剛創建的
線程組
。 - 依次選擇
添加 (Add)
->取樣器 (Sampler)
->HTTP 請求 (HTTP Request)
。 - 點擊新創建的
HTTP 請求
,在右側面板中進行核心配置:- Web 服務器 (Web Server)
- 服務器名稱或IP (Server Name or IP):
localhost
- 端口號 (Port Number):
8080
- 服務器名稱或IP (Server Name or IP):
- HTTP 請求 (HTTP Request)
- 方法 (Method): 選擇
POST
- 路徑 (Path):
/api/convert/JODConverter
- 重要: 如果要上傳文件,記得勾選
Use multipart/form-data for POST
復選框。
- 方法 (Method): 選擇
- Web 服務器 (Web Server)
- 如果要配置上傳文件:
- 切換到下方的
Files Upload
標簽頁。 - 點擊
添加 (Add)
按鈕。 - 填寫文件信息:
- 文件路徑 (File Path): 點擊
Browse...
選擇您準備好的測試Word文檔。 - 參數名稱 (Parameter Name):
file
(必須和后端接口的@RequestParam("file")
一致) - MIME 類型 (MIME Type):
application/vnd.openxmlformats-officedocument.wordprocessingml.document
- 文件路徑 (File Path): 點擊
- 切換到下方的
第三步:添加監聽器 (查看測試結果)
沒有監聽器,我們就看不到任何測試結果。
- 再次右鍵點擊
線程組
。 - 依次選擇
添加 (Add)
->監聽器 (Listener)
->聚合報告 (Aggregate Report)
。- 這個監聽器會在測試運行時,以表格形式實時匯總和展示平均響應時間、吞吐量、錯誤率等核心性能指標。
- (可選,推薦用于調試) 右鍵點擊
線程組
->添加 (Add)
->監聽器 (Listener)
->查看結果樹 (View Results Tree)
。- 這個監聽器可以看到每一次請求的詳細信息。注意:在正式進行大并發量測試時,請禁用它(右鍵點擊 -> 禁用),因為它會消耗較多內存。
二、執行測試與保存結果
測試計劃創建好后,下一步就是執行它并保存結果以供分析。推薦使用命令行模式執行正式的壓測。
方法一:通過 GUI 保存結果
此方法適用于快速查看和調試,不推薦用于正式壓測。
- 在 JMeter 圖形界面中,選中您的
聚合報告 (Aggregate Report)
監聽器。 - 在右側的配置面板中,找到
文件名 (Filename)
輸入框。 - 點擊
瀏覽 (Browse)...
按鈕,選擇一個路徑并輸入一個文件名,例如/Users/sunyuan/develop/project/word2pdf/performance_results/jmeter_results.csv
。 每次運行測試時,結果會自動追加到這個文件中。
方法二:使用命令行執行壓測(推薦的最佳實踐)
雖然圖形化界面便于設計腳本,但官方強烈建議使用命令行模式來執行真正的壓力測試。這樣做可以避免 GUI 帶來的額外性能開銷,確保測試結果的純凈和準確。
-
保存您的 JMeter 測試計劃:
- 在 JMeter 圖形界面中,點擊
文件 (File)
->保存測試計劃為 (Save Test Plan as)
。 - 將測試計劃保存為一個
.jmx
文件,例如/Users/sunyuan/develop/project/word2pdf/shell/test_plan.jmx
。
- 在 JMeter 圖形界面中,點擊
-
通過命令行執行:
- 打開一個新的終端窗口。
- 使用以下命令來執行測試。這個命令會自動處理結果文件的保存和后續的 HTML 報告生成。
Bash
# 定義變量,方便管理 BASE_DIR="/Users/sunyuan/develop/project/word2pdf" TEST_PLAN="${BASE_DIR}/shell/test_plan.jmx" RESULT_FILE="${BASE_DIR}/performance_results/jmeter_results.csv" REPORT_DIR="${BASE_DIR}/performance_results/html_report"# 確保結果文件和報告目錄是干凈的 (JMeter要求報告目錄為空) rm -f $RESULT_FILE rm -rf $REPORT_DIR mkdir -p $REPORT_DIR# 執行 JMeter 命令行壓測 jmeter -n -t $TEST_PLAN -l $RESULT_FILE -e -o $REPORT_DIR
命令參數解析:
-n
: non-GUI mode,以無圖形界面模式運行。-t <file.jmx>
: test plan,指定要運行的測試計劃文件。-l <file.csv>
: log file,指定用于記錄測試結果的日志文件。-e
: end,表示在測試結束后生成 HTML 報告。-o <directory>
: output directory,指定存放 HTML 報告的輸出目錄。此目錄必須為空或不存在。
三、結果分析
測試完成后,需要對結果數據進行詳細解讀,以評估系統性能。
聚合報告 (Aggregate Report) 結果解讀
-
Label
:是我們測試的請求的標簽或名稱。 -
# Samples
(樣本數): 總共完成了 200 次請求。 -
Average
(平均響應時間): 所有請求的平均響應時間是 1808 毫秒 (約 1.81 秒)。這是評估服務處理速度最核心、最直觀的指標。 -
Median
(中位數): 50% 的用戶響應時間低于 1754 毫秒。比平均值更能抵抗極端值的影響。 -
90% Line
(90百分位): 90% 的請求響應時間都在 2060 毫秒 (2.06 秒) 以內。 -
95% Line
(95百分位): 95% 的請求響應時間都在 2183 毫秒 (2.18 秒) 以內。這是衡量服務穩定性的一個常用指標 (SLI/SLO)。 -
99% Line
(99百分位): 99% 的請求響應時間都在 2420 毫秒 (2.42 秒) 以內,幫助我們了解最慢請求的情況。 -
Min
/Maximum
(最小/最大響應時間): 最快的一次花費了 1.58 秒,最慢的一次花費了 2.83 秒。 -
Error %
(錯誤率): 0.00% 是一個完美的指標!說明在當前并發壓力下,服務非常穩定。 -
Throughput
(吞吐量): 服務器每秒鐘能成功處理 1.1 個轉換請求。這是衡量服務器處理能力的核心指標,通常也稱為 QPS (Queries Per Second)。 -
Received/Sent KB/sec
: 每秒接收和發送的數據量。發送 (Sent
) 遠大于接收 (Received
),符合上傳大文件的場景。
jmeter_results.csv
文件列名分析
CSV 文件記錄了每一次請求的詳細數據,便于進行更深入的分析。
列名 | 示例值 | 含義 |
---|---|---|
responseCode | 200 | HTTP 響應狀態碼。200 代表 OK (成功)。 |
threadName | word2pdf thread group 1-1 | 發出請求的具體虛擬用戶(線程)的名稱。 |
dataType | text | 響應數據的類型。 |
success | true | 請求是否成功。錯誤率 (Error % ) 就是根據此列計算的。 |
bytes | 740 | 響應數據的大小(字節)。成功后只返回小段 JSON,所以值很小。 |
sentBytes | 1691146 | 發送數據的大小(字節)。此值很大,代表上傳的 Word 文檔大小。 |
grpThreads | 2 | 請求發生時,其所在線程組內的活躍線程數。 |
allThreads | 2 | 請求發生時,整個測試計劃中的總活躍線程數。 |
URL | http://127.0.0.1:8080/... | 請求的完整 URL 地址。 |
Latency | 1792 | (重要指標) 從發出請求到接收到響應第一個字節的時間 (ms),主要衡量服務器端處理時間。 |
Connect | 0 | 建立 TCP 連接的時間 (ms)。通常只有首個請求耗時,后續復用連接,時間為 0。 |
四、常見問題與技巧
Q: 點擊綠色啟動按鈕時,應該選中哪個元件?
A: 您不需要選中任何特定的元件。
JMeter 的啟動按鈕(綠色的三角箭頭 ?
)是針對整個測試計劃 (Test Plan) 生效的。無論您當前在左側的樹狀視圖中選中了哪個元件,當您點擊啟動按鈕時,JMeter 都會從最頂層的 Test Plan
開始,執行其中所有未被禁用的元件。
如果不測試的元件,要禁用
關于啟動和停止的額外提示
- 啟動 (Start): 綠色的
?
按鈕。 - 停止 (Stop): 紅色的
■
按鈕。這會立即停止所有線程,可能會中斷正在進行的請求。 - 優雅地停止 (Shutdown):
停止
按鈕旁邊的那個灰色■
按鈕。這會允許當前正在執行的請求完成后再停止所有線程,是更推薦的停止方式。 - 清除結果 (Clear All): 工具欄上的掃帚圖標
🧹
。點擊它會清除所有監聽器(如聚合報告
、查看結果樹
)中已有的測試結果,方便您開始一次全新的測試。