課程:B站大學
記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師
性能測試-jmeter實戰1
- 為什么需要性能測試呢?
- 性能測試的作用?
- 性能測試體系
- 性能測試基礎
- 性能測試工具
- 性能監控體系
- 全鏈路自動化測試
- 性能測試與分析優化
- 性能測試標準
- 流行性能壓測工具介紹
- 1、Aapache AB工具
- 2、Aapache JMeter工具
- 核心功能
- 常見使用場景
- 典型組件結構
- 實戰場景(接口壓測)
- 3、Grinder工具
- 組件結構
- 實戰工作流程
- 4、Locust工具
- 核心特點
- 實戰壓測 GET 接口
- 實踐是檢驗真理的唯一標準
為什么需要性能測試呢?
目的是確保系統在高并發或大數據量下依然響應快速、穩定運行,避免系統崩潰或卡頓,保障用戶體驗和業務連續性。
凡是軟件就一定存在性能瓶頸,只有在不斷改進性能中,軟件才會越走越遠!
性能測試的作用?
有效的性能測試能給研發、運維團隊提供有效的容量規劃能力、系統風險識別、系統瓶頸識別、性能調優指導。
性能測試體系
主要分為:
性能測試基礎
- 性能測試標準流程
- 性能測試核心指標
- 性能測試目的/方法
- 服務基礎知識:Nginx、WebServer、DB、Cache、MQ、微服務等等
性能測試工具
- 工具高級功能、插件、條件處理、腳本編程
- 工具基礎使用&調試
- 工具高階開發、多謝語言支撐
- 性能測試源碼&平臺開發
- 性能測試分布式運行
性能監控體系
- 主機監控:CPU Memory NetWork
- 應用指標監控、QPS、并發
- 存儲監控、Mysql、Redis、Kafka
- 全鏈路可觀測、SkyWalking、Zepkin
- 性能調優,JVM,系統調優
全鏈路自動化測試
- 線上服務& 數據隔離
- 用戶場景流量生成
- 壓測方案&止損方案
性能測試與分析優化
一張圖就說明了,掌握性能測試必須掌握的技術棧如下圖:
性能測試標準
這張性能測試圖表通過三條關鍵曲線(資源利用率U、吞吐量X、響應時間R)直觀展示了系統在不同并發用戶數下的表現。
1、曲線趨勢分析??
- ??紫色U曲線(資源利用率)??:隨并發數增加持續上升,最終趨于平緩(資源飽和)。
- 綠色X曲線(吞吐量)??:先線性增長(輕載期),達到峰值后下降(系統過載)。
- ??紅色R曲線(響應時間)??:初期平穩,超過最佳并發數后指數級上升(用戶體驗惡化)。
??2、關鍵區域劃分?? - 輕載區(Light Load)??:資源充足,吞吐量與并發數成正比,響應時間穩定。
- 最佳并發數(Optimum)??:吞吐量達到峰值,資源利用率合理,響應時間可控。
- 重載區(Heavy Load)??:資源飽和(U曲線平緩),吞吐量下降(X曲線拐點),響應時間激增(R曲線陡峭)。
- ??崩潰區(Buckle Zone)??:系統過載,吞吐量驟降,響應時間不可接受,用戶受影響明顯。
??3、測試意義??
- 確定系統性能拐點(最佳/最大并發數),為容量規劃提供依據。
- 揭示資源瓶頸(如CPU/內存飽和導致吞吐量下降)和用戶體驗臨界點(響應時間突增)。
流行性能壓測工具介紹
1、Aapache AB工具
- Apache HTTP Server 自帶的一個輕量級命令行性能測試工具,常用于對 Web 服務器進行簡單的壓力測試和基準測試。
主要用于linux服務端,無圖形化
基本命令示例:
ab -n 1000 -c 100 http://example.com/
命令解析:
-n 1000:總共發送 1000 個請求
-c 100:同時開啟 100 個并發請求
http://example.com/:測試目標 URL
常用參數:
-n 請求總數
-c 并發請求數
-t 測試時長(單位秒)
-p 發送 POST 請求的文件
-T 指定 Content-Type(用于 POST)
-H 自定義請求頭
-k 使用 HTTP Keep-Alive
-A 添加用戶名和密碼(Basic Auth)
輸出指標說明(部分):
指標名稱 含義說明
Requests per second 每秒處理請求數(TPS),反映服務吞吐能力
Time per request 單個請求平均耗時
Percentage served within 表示百分之幾的請求在某個時間內返回(響應時間分布)
Failed requests 失敗請求數量,通常關注是否為 0
場景:適用于 接口層 和 靜態頁面 的基礎性能評估
2、Aapache JMeter工具
- 廣泛用于對 Web 應用、接口、數據庫等進行壓力測試、負載測試和功能測試。
支持協議 HTTP、HTTPS、SOAP、REST、JDBC、FTP、MQ、TCP、WebSocket 等
核心功能
- 壓力測試 模擬成千上萬個并發用戶訪問系統
- 接口測試 可用于 HTTP/HTTPS 接口功能測試和性能測試
- 分布式測試 支持 master-slave 模式,執行分布式壓力測試
- 報表生成 自動生成 HTML 格式的圖形化測試報告 參數化/斷言 支持讀取 CSV 文件作為測試數據,支持響應斷言(內容、狀態碼等)
- 腳本可視化 提供可視化測試計劃配置界面,便于拖拽式建模
- 插件豐富 擁有大量社區插件(如 JMeter Plugin Manager)
常見使用場景
- 網站首頁或接口的并發訪問能力測試
- 用戶登錄/下單/支付流程的接口壓力測試
- 數據庫 SQL 查詢性能分析
- 消息隊列、FTP 服務性能評估
- 接口自動化測試(可集成 CI/CD)
典型組件結構
一個完整的 JMeter 測試計劃通常包括:
測試計劃(Test Plan)
└── 線程組(Thread Group)├── Sampler(采樣器,如 HTTP 請求)├── Listener(監聽器,如查看結果樹、匯總報告)├── Assertion(斷言,如響應斷言)├── Pre/Post Processor(前置/后置處理器)└── Config Element(配置元素,如請求默認值、CSV 數據集)
實戰場景(接口壓測)
- 添加線程組,設置并發數為 100,循環 10 次
- 添加 HTTP 請求,配置目標接口和參數
- 添加響應斷言,驗證接口響應碼是否為 200
- 添加監聽器,查看響應時間、錯誤率、TPS 等指標
- 執行并查看圖形報告或導出 HTML 報告
3、Grinder工具
- 適用于對 Web 應用、HTTP 服務、數據庫、Socket、RMI 等進行壓力測試。它由 Grinder Project 開發,靈活性強,支持通過 Jython(Python for Java)腳本編寫測試邏輯。
組件結構
- Agent:執行測試的負載生成器(可部署多臺)
- Console:控制器/監控器,負責啟動、停止測試、收集結果
- Script:基于 Jython 編寫的腳本,定義測試流程和邏輯
- Properties 文件:配置參數(如線程數、腳本路徑、目標地址等)
實戰工作流程
1、編寫 test_script.py,模擬請求邏輯
2、編輯 grinder.properties 配置文件,設置線程數、測試目標等
3、啟動 Console:java net.grinder.Console
4、啟動 Agent:java net.grinder.Grinder grinder.properties
5、在 Console 中開始測試,實時查看并收集報告
比如下面得http請求:
from net.grinder.script import Test
from net.grinder.plugin.http import HTTPRequest
from net.grinder.script.Grinder import grinderrequest = HTTPRequest()
test = Test(1, "Test HTTP Request")
test.record(request)class TestRunner:def __call__(self):result = request.GET("http://example.com")
使用得場景:
- 大型系統的分布式性能測試
- 需要高度定制協議、邏輯的性能測試
- 企業 Java 項目的接口、數據庫、Socket 等多協議性能驗證
- 對資源使用、并發控制、流程自定義要求高的性能測試場景
4、Locust工具
- 用于模擬用戶行為并對系統進行負載測試。相比 JMeter、AB 等工具,Locust 更輕量、可編程性強、易讀易寫,廣泛應用于 Web 系統、API 接口的壓力測試。
核心特點
特點 | 說明 |
---|---|
Python 腳本驅動 | 測試邏輯通過 Python 編寫,靈活可編程 |
Web UI 控制面板 | 可在瀏覽器中設置并發數、啟動壓測,實時查看請求數、失敗率等指標 |
支持分布式壓測 | 可輕松擴展為分布式部署,應對大規模并發測試 |
清晰的用戶行為建模 | 以“用戶行為”為核心概念,符合真實業務建模方式 |
易集成、低門檻 | Python 編寫,易上手,便于與測試框架和自動化流程集成 |
實戰壓測 GET 接口
from locust import HttpUser, task, betweenclass WebsiteUser(HttpUser):wait_time = between(1, 3) # 模擬用戶行為等待時間(1-3秒)@taskdef index(self):self.client.get("/")
運行命令:
locust -f locustfile.py --host=http://example.com
控制臺輸出指標,但是這個使用較少,一般主要用于接口性能測試或者自動化測試
目前國內主要的性能測試工具還是必選Jmeter
下一章分析性能監控工具