【軟件測試】性能測試 —— 工具篇 JMeter 介紹與使用

🥰🥰🥰來都來了,不妨點個關注叭!
👉博客主頁:歡迎各位大佬!👈

在這里插入圖片描述

文章目錄

  • 1. JMeter 的介紹
  • 2. JMeter 安裝、配置、搭建
    • 2.1 前置條件 —— Java環境搭建
    • 2.2 JMeter 下載
    • 2.3 JMeter 安裝
    • 2.4 JMeter 啟動
  • 3. JMeter 基本使用
    • 3.1 前置知識
    • 3.2 JMeter 腳本編寫
      • Step1:添加線程組
      • Step2:添加請求(HTTP請求)
      • Step3:添加查看結果樹
      • Step4:添加用戶自定義變量
      • Step5:添加斷言
      • Step6:添加斷言結果
      • Step7:添加聚合報告
    • 3.3 JMeter 執行性能測試
      • Step1:配置線程組
      • Step2:執行,觀察聚合報告

前面內容介紹了 LoadRunner 性能測試工具,可回顧這期內容【軟件測試】性能測試 —— 工具篇 LoadRunner 介紹與使用

JMeter、LoadRunner 都是目前非常好用的性能測試工具,也很主流,并沒有什么好壞之分,因為 JMeter 開源(免費~),同時使用頻率比較高,因此我們一起來看看如何使用 JMeter 吧~

1. JMeter 的介紹

介紹】JMeter 是一款開源的負載測試工具,主要用于模擬各種負載場景,測試軟件、系統或網絡的性能、可靠性和穩定性

核心功能

  • 負載測試與壓力測試
    1)模擬大量用戶并發訪問,測試系統在不同負載下的響應時間、吞吐量等性能指標
    2)支持逐步增加用戶數(階梯式負載)或瞬間高并發(峰值負載),驗證系統極限承載能力
  • 多協議支持
    1)主流協議:HTTP/HTTPS、JDBC(數據庫)、WebSocket 等
    2)擴展協議:通過插件支持 gRPC、Dubbo 等,滿足多樣化測試需求
  • 測試場景設計
    1)可創建復雜的用戶行為流程,通過"線程組"、“取樣器”、“邏輯控制器” 等組件模擬真實業務場景
    2)支持參數化(如動態生成用戶賬號、隨機數據),增強測試的真實性
  • 結果分析與可視化
    1)生成圖表,如響應時間曲線圖、吞吐量柱狀圖等,可以直觀展示性能瓶頸
    2)支持將結果導出為 CSV、XML 或 HTML,便于二次分析

適用場景

  • Web 應用測試:驗證網站在高并發下的響應速度和穩定性
  • API 接口測試:測試 RESTful API、SOAP 接口的性能和容錯能力
  • 數據庫測試:模擬大量 SQL 查詢,評估數據庫性能
  • 分布式系統測試:測試多節點集群的負載均衡和協同能力

JMeter 最大的優勢就是開源免費還好用(白嫖誰不喜歡呢~嘿嘿),并且通過插件機制支持更多協議,圖形化界面也是十分友好的,可以通過拖拽式操作簡化測試計劃設計!

基本組件

  • 線程組模擬用戶群體,設置并發數、循環次數等
    • 線程數:模擬用戶數量
    • Ramp-Up 時間:達到指定線程所需要的時間,比如設置線程數為500,Ramp-Up時間為10s,則每秒啟動50個線程
    • 循環次數:測試的循環次數
  • 取樣器發送請求(如 HTTP 請求、JDBC 查詢),獲取服務器響應
    • 用于向服務器發送請求,如HTTP/HTTPS請求、JDBC查詢等
    • 在線程組下添加取樣器,配置請求的URL、方法、參數等內容
  • 監聽器收集并展示測試結果(如表格、圖表、聚合報告)
  • 斷言驗證響應結果是否符合預期(如狀態碼 200、響應包含特定字符串)
    • 用于驗證響應是否符合預期,可以使用正則表達式、Xpath等方式進行斷言
  • 配置元件設置全局參數(如 HTTP 頭信息、數據庫連接池)
  • 前置處理器、后置處理器:在單個取樣器執行前/后觸發
    • 前置處理器,在單個取樣器執行前觸發,對取樣器進行預處理,如生成隨機參數替換請求中的變量,從文件讀取數據并傳入請求,修改取樣器的請求內容
    • 后置處理器 在單個取樣器執行后觸發,處理取樣器的響應結果,如從響應中提取關鍵數據(如 token、ID),對響應結果進行格式化或轉換,將提取的數據保存為變量供后續取樣器使用
  • 邏輯控制器控制請求執行順序(如 if 條件判斷、循環、事務)
    • 用于控制測試的執行邏輯,如if條件判斷、循環等

2. JMeter 安裝、配置、搭建

2.1 前置條件 —— Java環境搭建

我們知道 JMeter 是基于 Java 語言開發的~ 因此,我們使用 JMeter 需要安裝 JDK~~

(這里不再贅述 JDK 下載和 Java 環境變量的配置~ 目前 JMeter 是 5+ 的版本,需要 JDK 8 以及以上的版本,一般安裝 JDK 8 即可)

2.2 JMeter 下載

JMeter 官方下載地址:JMeter 官方下載

在這里插入圖片描述

2.3 JMeter 安裝

  • Step1根據自己的系統,選擇對應的進行下載,下載安裝包后解壓(記住在哪個位置哦,后面環境變量需要用)
    在這里插入圖片描述
    在這里插入圖片描述
    (筆者安裝在了這里~)
  • Step2對環境變量進行配置
    1)添加變量
    復制 JMeter 下載后的路徑~ 在環境變量中配置:
    變量名JMETER_HOME,變量值為下載 JMeter 的路徑
    在這里插入圖片描述
    記得一步步點確定,避免沒有添加進去,忘記環境變量如何配的,可以直接搜索高級系統設置~)
    2)Path添加
    在 Path 里面 添加 %JMETER_HOME%\bin
    在這里插入圖片描述
  • Step3檢查是否下載安裝配置成功
    1)檢查 JMeter 版本:jmeter -v
    在這里插入圖片描述
    2)檢查 JMeter 是否能啟動:jmeter
    在這里插入圖片描述
    (如果沒有出現,可以檢查上述環境變量是否添加成功!!!如果都配置保存成功了,還是沒有出現,可以將在用戶變量里面Path添加%JMETER_HOME%\bin

2.4 JMeter 啟動

JMeter 啟動方式有兩種:
1)上述在 cmd 中輸入 :jmeter 則啟動了

在這里插入圖片描述

2)進入apache-jmeter-5.6.3,打開里面的 bin 文件,找到 ApacheJMeter.jar,雙擊

在這里插入圖片描述

啟動后頁面如下:

在這里插入圖片描述

3. JMeter 基本使用

3.1 前置知識

1)可以更換語言,選擇我們更熟悉的中文(簡體):Options ——> Choose Langauge ——> Chinese(Simplified)

在這里插入圖片描述
2)頁面按鈕功能介紹:

在這里插入圖片描述

3.2 JMeter 腳本編寫

本期內容以百度網站https://www.baidu.com/為例子,進行簡單的腳本編寫,也可以拿其它網站或者是自己的項目試試~

Step1:添加線程組

右鍵測試計劃,點擊添加 ——> 線程(用戶) ——> 線程組

在這里插入圖片描述
線程組可以配置如下內容:

在這里插入圖片描述
具體解釋

  • 名稱:給這個線程組取的名稱,以便區分
  • 注釋:對名稱的補充說明
  • 在取樣器錯誤后要執行的動作:可以很清楚的看到給出的選項,根據自己需要選擇取樣器(用于發送請求,獲取服務器響應)錯誤后是繼續、啟動下一進程循環、停止線程、停止測試還是立即停止測試
  • 線程屬性
    • 線程數:模擬用戶數,設置10個線程數則是模擬10個線程數
    • Ramp-up時間(秒):達到指定線程所需要的時間,設置10個線程數,Ramp-up為2s,則1s啟動5個線程
    • 循環次數:每個線程發送的請求次數,設置10個線程,10次循環次數,每個線程都發送10個請求,總共發送 10 * 10 = 100個請求
  • Same user on each iteration:在循環執行任務、重復處理流程中,保持"同一用戶"的上下文、狀態或身份信息一致,如保存用戶會話、權限信息、歷史操作記錄
  • 延遲創建線程直到需要:線程不預先創建,在任務實際需要執行時才動態創建線程(有沒有想到"懶加載"~)
  • 調度器:用于控制線程執行時機,何時啟動,持續多久(需要注意的是勾選了調度器,需要勾選循環次數為永遠)
    • 持續時間(秒):測試持續的時間
    • 啟動延遲(秒):測試延遲的啟動時間

在這里插入圖片描述

Step2:添加請求(HTTP請求)

右鍵線程組 ——> 添加 ——> 取樣器 ——> HTTP請求(根據自己需要來)

在這里插入圖片描述

HTTP請求可以配置如下內容:

在這里插入圖片描述

具體解釋

  • 名稱:給這個HTTP請求取的名稱,以便區分
  • 注釋:對名稱的補充說明
  • Web服務器
    • 協議:向目標服務器發送請求的協議,可以是HTTP/HTTPS,默認是HTTP
    • 服務器名稱或IP:發送目標服務器的名稱或者IP
    • 端口號:目標服務器端口號,默認值為80(因為HTTP默認端口號為80)
  • HTTP請求
    • 方法:發送HTTP請求的方法,最常用的有 GET、POST 等等
    • 路徑:目標URL地址(即URL后面去掉服務器地址后的剩余部分)
    • 內容編碼:編碼方式,這里配置為常用的utf-8,默認為ISO-8859-1編碼
  • 同請求一起發送的參數:URL中的參數(下圖棕色框框部分,注意參數傳入中文的時候,需要勾選"編碼"

在這里插入圖片描述
在這里插入圖片描述

Step3:添加查看結果樹

查看結果樹查看和分析 HTTP 請求的響應結果(簡單地進行分析)

右鍵點擊線程組 ——> 添加 ——> 監聽器 ——> 查看結果樹

在這里插入圖片描述
接著運行,將響應數據格式改成:HTML_Source Formatted 可以查看結果~ 如下:

可以看到是按照我們的配置發送的請求,向百度搜索"哈哈哈哈哈",發送的請求是正確的

在這里插入圖片描述
取樣器結果:

在這里插入圖片描述

Step4:添加用戶自定義變量

用戶自定義變量】添加用戶自定義變量是為了方便存儲和管理需要的值,用戶自定義變量是全局的,可以在測試計劃中任何地方引用,避免重復寫

右鍵點擊線程組 ——> 添加 ——> 配置元件 ——> 用戶定義的變量

在這里插入圖片描述
我們可以將 wd 的變量存儲起來,wd 參數是用于存搜索詞語的

1)添加變量

在這里插入圖片描述
2)使用變量:使用 ${變量名稱}

在這里插入圖片描述

Step5:添加斷言

斷言】驗證測試結果是否符合預期

右鍵點擊線程組 ——> 添加 ——> 斷言 ——> 響應斷言

在這里插入圖片描述
在這里插入圖片描述

Step6:添加斷言結果

添加斷言結果,我們可以看到 HTTP 請求中的斷言結果是否正確

右鍵點擊HTTP請求 ——> 添加 ——> 監聽器 ——> 斷言結果

在這里插入圖片描述
點擊運行,可以看到運行結果如下:

在這里插入圖片描述

Step7:添加聚合報告

聚合報告】匯總和分析測試結果工具,提供了各種性能指標如請求數、平均響應時間、吞吐量等,來存儲性能測試報告的~

右鍵點擊線程組 ——> 添加 ——> 監聽器 ——> 聚合報告

在這里插入圖片描述

在這里插入圖片描述

具體解釋

  • Label: 測試中 HTTP 請求的"自定義名稱"
  • #樣本:請求數,實際執行的請求數量,發了多少次請求,比如這里是 10 * 10 = 100
  • 平均值:平均響應時間(默認是單個請求的平均響應時間)
  • 中位數:50%用戶的響應時間
  • 90%百分位:90%用戶的響應時間
  • 95%百分位:95%用戶的響應時間
  • 99%百分位:99%用戶的響應時間
  • 最小值:所有請求中最快的響應時間,最小響應時間
  • 最大值:所有請求中最慢的響應時間,最大響應時間
  • 異常%:請求錯誤率(請求錯誤數/請求總數)
  • 吞吐量:單位時間處理的請求數(默認是每秒完成的請求數)
  • 接收KB/sec:每秒從服務器接收的數據量(響應數據大小)
  • 發送KB/sec:每秒向服務器發送的數據量(請求數據大小)

3.3 JMeter 執行性能測試

Step1:配置線程組

在這里插入圖片描述

Step2:執行,觀察聚合報告

在這里插入圖片描述

分析測試結果,不斷調整測試計劃,發現問題~

(如果想重新執行,可以點擊清除按鈕~)

筆者在這里請求頻率過高,觸發了安全驗證流程(看到這個不用慌~)

在這里插入圖片描述

?小建議:

  • 精簡監聽器:測試期間,若無需實時查看結果,可關閉非必要監聽器,降低系統資源消耗,保障測試高效運行
  • 按需用斷言:斷言并非越多越好,過量斷言會增加測試復雜度,結合實際測試需求,精準使用斷言,聚焦核心驗證點
  • 迭代調計劃:測試流程中,需動態優化測試計劃,通過靈活調整線程數、循環次數等參數,不斷逼近最佳測試效果,適配系統性能驗證需求
  • 深析結果數據:借聚合報告等專業分析工具,對測試結果開展深度剖析。從數據中挖掘潛在性能問題,為系統優化提供精準依據 。

???本期內容到此結束啦~ (想必 JMeter、LoadRunner 性能測試工具我們都會用了吧~~)

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

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

相關文章

二十二、Mybatis-快速入門程序

入門程序大概步驟敘述: 步驟一:創建springboot工程并且數據庫提前創建表步驟二:創建springboot工程對Mybatis相關依賴注意打勾步驟三:編寫查找方法步驟四:編寫測試方法項目目錄結構與數據庫以及代碼: 項目目…

Blender模擬結構光3D Scanner(一)外參數匹配

如何使用Blender模擬FPP(Fringe Projection Profilometry) 原理的結構光3D傳感器?主要包含的工作有:1)相機、投影儀定位與內外參數匹配;2)投影儀投射指定Pattern圖像;3)被測物體材質屬性配置等&…

LangChain是如何實現RAG多輪問答的

目錄引言一、LangChain實現RAG多輪問答核心機制1. 對話歷史管理(Memory)2. 問題重寫(Query Rewriting)3. 檢索增強生成(RAG Core)4. 鏈式工作流(Chain)二、關鍵設計特點三、完整示例…

DAY 44 預訓練模型

知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 一、預訓練的概念 我們之前在訓練中發現,準確率最開始隨著epoch的增加而增加。隨著循環的更新,參數在不斷發生更新。 所…

Java Stream API 中常用方法復習及項目實戰示例

在最近的練手項目中,對于stream流的操作愈加頻繁,我也越來越感覺stream流在處理數據是的干凈利落,因此寫博客用來記錄最近常用的方法以便于未來的復習。map() 方法map()是一個中間操作(intermediate operation)&#x…

從零開始手搓一個GPT大語言模型:從理論到實踐的完整指南(一)

現在人工智能飛速發展時代,LLM絕對可以算是人工智能領域得一顆明珠,也是現在許多AI項目落地得必不可少得一個模塊,可以說,不管你之前得研究領域是AI得哪個方向,現在都需要會一些LLM基礎,在這個系列&#xf…

Redis ubuntu下載Redis的C++客戶端

1. 安裝 redis-plus-plus C 操作 Redis 的庫有很多,這里選擇使用 redis-plus-plus,這個庫的功能強大,使用簡單。 Github 地址:GitHub - sewenew/redis-plus-plus: Redis client written in C 訪問不了Github 地址的可以使用Ste…

nm命令和nm -D命令參數

出現這種差異的原因在于:動態庫中的符號分為兩種類型: 常規符號表(regular symbol table):通常用于靜態鏈接和調試,默認不包含在動態庫中(除非顯式保留)。動態符號表(dyn…

Windows下cuda的安裝和配置

今天開始做一個cuda教程。由于本人主要在windows下使用visual studio進行開發,因此這里講一下windows下的cuda開發環境。 下載cuda_toolkit 從網站https://developer.nvidia.com/cuda-toolkit中下載,先選擇Download Now,然后跳轉到如下頁面&#xff1a…

【代碼隨想錄day 19】 力扣 450.刪除二叉搜索樹中的節點

視頻講解:https://www.bilibili.com/video/BV1tP41177us/?share_sourcecopy_web&vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解:https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%A…

智慧養老丨實用科普+避坑指南:科技如何讓晚年生活更安全舒適?

隨著老齡化社會的到來,智慧養老產品逐漸成為改善老年人生活質量的重要工具。從智能手表到便攜洗浴機,科技正為老年人的健康、安全與生活便利提供創新解決方案。我們這次主要介紹四類典型智慧養老產品,結合真實體驗給出選購建議,并…

系統垃圾清理批處理腳本 (BAT)

系統垃圾清理批處理腳本 (BAT) 以下是一個Windows系統垃圾清理的批處理腳本,它可以清理常見的系統臨時文件、緩存和日志等: echo off title 系統垃圾清理工具 color 0a echo. echo 正在清理系統垃圾文件,請稍候... echo.:: 清理臨時文件 echo…

Terraform的零基礎學習教程

一、Terraform 是什么? Terraform 是由 HashiCorp 開發的開源工具,用于自動化管理云基礎設施(如 AWS、Azure、GCP 等)。 核心特點: 基礎設施即代碼(IaC):用代碼定義和管理資源。跨…

429. N 叉樹的層序遍歷(中等)題解

題目描述給定一個 N 叉樹,返回其節點值的層序遍歷。(即從左到右,逐層遍歷)。樹的序列化輸入是用層序遍歷,每組子節點都由 null 值分隔(參見示例)。示例 1:輸入:root [1,…

Java 課程,每天解讀一個簡單Java之題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

package ytr250813;import java.io.IOException;public class CharacterCounter {public static void main(String[] args) throws IOException {// 初始化計數器變量int letterCount 0; // 英文字母計數器int spaceCount 0; // 空格計數器int digitCount 0; // 數字計數器i…

GitLab CI + Docker 自動構建前端項目并部署 — 完整流程文檔

一、環境準備1. 服務器準備一臺Linux服務器(CentOS/Ubuntu皆可),推薦至少4核8GB內存已安裝 Docker(及 Docker 服務已啟動)已安裝 GitLab Runner2. 服務器上安裝 Docker (如果沒裝)# CentOS9以下…

LCP 17. 速算機器人

目錄 題目鏈接: 題目: 解題思路: 代碼: 總結: 題目鏈接: LCP 17. 速算機器人 - 力扣(LeetCode) 題目: # LCP 17. 速算機器人 小扣在秋日市集發現了一款速算機器人。…

Spring cloud集成ElastictJob分布式定時任務完整攻略(含snakeyaml報錯處理方法)

ElasticJob 是一款輕量級、可擴展的分布式定時任務解決方案,基于 Quartz 二次開發,支持任務分片、失效轉移、任務追蹤等功能,非常適合在 Spring Cloud 微服務場景中使用。我將帶你完成 Spring Cloud 集成 ElasticJob 的全過程,并分…

了解 Linux 中的 /usr 目錄以及 bin、sbin 和 lib 的演變

Linux 文件系統層次結構是一個復雜且引人入勝的體系,其根源深植于類 Unix 操作系統的歷史之中。在這一結構的核心,/usr 目錄是一個至關重要的組成部分,隨著時間的推移,它經歷了顯著的演變。與此同時,/bin、/sbin、/lib…

高級IO(五種IO模型介紹)

文章目錄一、IO為什么慢?一、阻塞IO二、非阻塞IO三、信號驅動IO四、IO多路復用五、異步IO一、IO為什么慢? IO操作往往都是和外設交互,比如鍵盤、鼠標、打印機、磁盤。而最常見的就是內存與磁盤的交互,要知道磁盤是機械設備&#…