性能測試-jmeter實戰1

課程: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
在這里插入圖片描述
下一章分析性能監控工具

實踐是檢驗真理的唯一標準

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82862.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML、XML、JSON 是什么?有什么區別?又是做什么的?

在學習前端開發或者理解互聯網工作原理的過程中,我們經常會遇到三個非常重要的概念:HTML、XML 和 JSON。它們看起來有點像,但其實干的事情完全不同。 🏁 一、他們是誰?什么時候誕生的? 名稱全稱誕生時間誰…

HTML5 全面知識點總結

一、HTML 基礎概念 HTML:超文本標記語言,用于創建網頁和 Web 應用的結構。 超文本:可以包含文字、圖片、音頻、視頻、鏈接等多種媒體。 標記語言:通過標簽標記網頁的各個部分。 二、HTML5 的新特性(區別于 HTML4&am…

記錄一個難崩的bug

1.后端配置了 Filter 過濾器,如果再配置了Configuration ,那么會出現沖突嗎? 過濾器與Configuration類本身無直接沖突,但需注意注冊機制、執行順序和依賴管理。通過顯式控制過濾器的注冊方式和優先級,結合Spring Security的鏈式配…

RabbitMQ 與其他 MQ 的對比分析:Kafka/RocketMQ 選型指南(二)

四、三者性能大比拼 4.1 吞吐量 吞吐量是衡量消息隊列處理能力的重要指標,它反映了在單位時間內消息隊列能夠處理的消息數量。在這方面,Kafka 表現最為出色,其獨特的設計使其能夠輕松處理每秒數百萬條消息 。Kafka 采用分布式架構和分區機制…

【C】箭頭運算符

在C語言中,p_tone->power_off 是一種通過指針訪問結構體成員的方法,稱為箭頭運算符(->)。它主要用于以下場景: 1. 語法解釋 p_tone:是一個指向結構體(或聯合體)的指針。powe…

【Unity】 HTFramework框架(六十六)缺省的運行時組件檢視器

更新日期:2025年5月29日。 Github 倉庫:https://github.com/SaiTingHu/HTFramework Gitee 倉庫:https://gitee.com/SaiTingHu/HTFramework 索引 一、缺省的運行時組件檢視器1.自定義運行時組件檢視器 二、使用缺省的運行時組件檢視器1.定義組…

AI和大數據:是工具,還是操控人心的“隱形之手”?

AI和大數據:是工具,還是操控人心的“隱形之手”? 開場白:聊點現實的 在這個數據至上的時代,我們的生活被AI和大數據悄然改變。從電商推薦、短視頻算法,到招聘篩選、智慧城市,它們像一個貼心的…

k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件 文章目錄 k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter簡介二、kubernetes-event-exporter實戰部署1. 創建Namespace&a…

Apache 高級配置實戰:從連接保持到日志分析的完整指南

Apache 高級配置實戰:從連接保持到日志分析的完整指南 前言 最近在深入學習 Apache 服務器配置時,發現很多朋友對 Apache 的高級功能還不夠了解。作為一個在運維路上摸爬滾打的技術人,我想把這些實用的配置技巧分享給大家。今天這篇文章會帶…

【Stable Diffusion 1.5 】在 Unet 中每個 Cross Attention 塊中的張量變化過程

系列文章目錄 文章目錄 系列文章目錄前言特征圖和注意力圖的尺寸差異原因在Break-a-Scene中的具體實現總結 前言 特征圖 (Latent) 尺寸和注意力圖(attention map)尺寸在擴散模型中有差異,是由于模型架構和注意力機制的特性決定的。 特征圖和注意力圖的尺寸差異原…

【監控】Prometheus+Grafana 構建可視化監控

在云原生和微服務架構盛行的今天,監控系統已成為保障業務穩定性的核心基礎設施。作為監控領域的標桿工具,Prometheus和Grafana憑借其高效的數據采集、靈活的可視化能力,成為運維和開發團隊的“標配”。 一、Prometheus Prometheus誕生于2012…

替代 WPS 的新思路?快速將 Word 轉為圖片 PDF

在這個數字化辦公日益普及的時代,越來越多的人開始關注文檔處理工具的功能與體驗。當我們習慣了某些便捷操作時,卻發現一些常用功能正逐漸變為付費項目——比如 WPS 中的一項實用功能也開始收費了。 這款工具最特別的地方在于,可以直接把 W…

CodeTop之數組中的第K個最大的元素

題目鏈接 215. 數組中的第K個最大元素 - 力扣(LeetCode) 題目解析 算法原理 解法一: 直接理由java內部的排序函數,Arrays.sort()進行排序, 然后我們直接返回第k個最大的元素 nums[nums.length-k] 解法二: 使用堆 我們先把所有元素丟到大根堆里面…

AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析(包括基于規則的方法、CRF模型和BERT微調模型)

大家好,我是微學AI,今天給大家介紹一下AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析。本文將深入探討三種不同的命名實體識別(NER)方法,包括基于規則的方法、CRF模型和BERT微調模型,用于識別文本中的地名(LOC)、機構名稱(ORG)和人名(PER)實體。通過系統…

IP動態偽裝開關

IP動態偽裝開關 在OpenWrt系統中,IP動態偽裝(IP Masquerading)是一種網絡地址轉換(NAT)技術,用于在私有網絡和公共網絡之間轉換IP地址。它通常用于允許多個設備共享單個公共IP地址訪問互聯網。以下是關于O…

【MySQL】第10節|MySQL全局優化與Mysql 8.0新增特性詳解

全局優化 mysql server參數 1. max_connections(最大連接數) 含義:MySQL 服務允許的最大并發連接數(包括正在使用和空閑的連接)。超過此限制時,新連接會被拒絕(報錯 Too many connections&am…

VS Code 插件 Git History Diff

插件名 進命令行,進Git自己那個分支 查看分支 提交到Git的后想再把另一個也提交到那個分支,用這個命令

Shell腳本中的常用命令

一.設置主機名稱 文件設置 文件開機時已讀取所以要重新進入 命令更改(即使生效) 二.網絡管理命令 1.查看網卡命令 設置網卡 1)DHCP工作模式 2)靜態IP 3)修改網卡信息 三.簡單處理字符 1.打印連續數字 連續打印3個數字 指定打…

C++ 中 std::wstring::c_str() 的潛在風險與安全使用指南

一、問題背景 在開發過程中,我們經常會遇到不同接口之間的數據傳遞問題。例如,當調用某個接口時,需要傳入一個字符串指針作為數據接收的緩沖區,但外圍接口使用的是 std::wstring 類型。此時,如果直接將 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解決方法: 1. npm cache clean --force 2.臨時切換到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切換回鏡像源