性能測試工具篇

文章目錄

  • 目錄
    • 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介紹

環境要求:

JMeter環境要求

Apache JMeter 是 Apache 組織基于 Java 開發的壓力測試工具,用于對軟件做性能測試

1.1 安裝JMeter

下載tar包,解壓即可:

tar包

解壓完成后:

解壓完成后

1.2 打開JMeter

方式一:點擊bat文件

點擊bat文件

方式二:命令行啟動(推薦)

step1:添加JMeter系統環境變量

添加JMeter系統環境變量

step2:保存后打開命令行工具

保存后打開命令行工具

輸入命令jmeter即可啟動JMeter工具

1.3 JMeter基礎配置

修改字體為中文:

修改字體為中文

在jmeter的bin目錄下,修改文件中的內容:language=zh_CN

1.4 JMeter基本使用流程

補充:

  • 兩個最常用的按鈕

兩個最常用的按鈕

  • 運行前需要保存

運行前需要保存


  1. 啟動JMeter
  2. 在“測試計劃”下添加“線程組”

在“測試計劃”下添加“線程組”

  1. 在“線程組”下添加“HTTP”取樣器

在“線程組”下添加“HTTP”取樣器

  1. 填寫“HTTP請求”的相關請求數據

填寫“HTTP請求”的相關請求數據

  1. 在“線程組”下添加“查看結果樹”監聽器

在“線程組”下添加“查看結果樹”監聽器

  1. 點擊“啟動”按鈕運行,查看接口測試結果

點擊“啟動”按鈕運行,查看接口測試結果

1.5 JMeter元件作用域和執行順序

在JMeter中,元件的作用域和執行順序是非常重要的概念。

作用域:

JMeter元件的作用域主要由測試計劃的樹形結構中的元件父子關系來確定。

執行順序:

取樣器(sampler)元件內組件不依賴其他元件就可執行,因此取樣器不存在作用問題,元件作用域只對它的子節點有作用,其他作用域默認根據測試計劃中樹形結構來定。

2. 重點組件

2.1 線程組

控制JMeter將用于執行測試的線程數,也可以把一個線程理解為一個測試用戶。

線程組

2.2 HTTP取樣器

HTTP取樣器

2.3 查看結果樹

查看結果樹


注:

查看結果樹

2.4 HTTP請求默認值

補充:

補充


HTTP請求默認值

博客中涉及到的接口協議、IP、端口號全都一樣,可以單獨抽取出來存放在默認值中,其他接口就可以省略不寫協議、IP、端口號。


補充:

在測試博客列表頁時,當我們像博客登錄接口一樣,填寫了協議、IP、端口號、請求方法、路徑之后,會發現接口會報錯,是因為我們沒有在請求頭中添加登錄憑證。(因為只有登錄狀態下才能查看博客列表頁)

在Postman中加上之后是這樣的:

在Postman中加上登錄憑證

在Jmeter中:

在Jmeter中加上登錄憑證

但是我們現在給的登錄憑證是配置死的(會過期,或者換成其他用戶登錄就不行了),我們應該要給登錄接口返回的data值,接下來我們就來介紹如何實現。

2.5 JSON提取器

接口響應成功,通過提取返回值對應字段,可用于其他接口的參數配置

  1. 添加JSON提取器

添加JSON提取器

JSON操作符參考:

JSON操作符參考

  1. 添加JSON配置

添加JSON配置


檢查json提取表達式是否正確

  1. 配置json提取的參數

配置json提取的參數(1)


配置json提取的參數(2)


json提取器(1)

json提取器(2)

2.6 用戶定義的變量

添加方式:線程組 — 配置元件 — 用戶定義的變量

用戶定義的變量(1)

用戶定義的變量(2)

用戶定義的變量(3)


補充:

我們在測試發布博客接口時會遇到下面的問題:

發布博客接口

2.7 JSON斷言

接口發送請求成功,響應碼為200并不能完全代表接口請求成功,我們更多需要關注接口響應數據是否符合預期。

  1. 添加JSON斷言

添加JSON斷言

  1. 添加JSON配置

添加JSON配置

注意:

  • 若不選Additionally assert value,表示添加斷言值,則可用來判斷字段是否存在
  • 選擇Additionally assert value,則必須添加Expected Value期望的斷言值(精確匹配,區分大小寫)
  • 若不選Match as regular expression正則匹配,則Expected Value必須填寫完整,少一個字符都會導致斷言失敗
  • 若選擇Match as regular expression正則匹配,則Expected Value可以僅寫上部分關鍵詞即可斷言成功

2.8 同步定時器(集合點)

查看線程狀態

線程狀態

為了解決這個問題,達到并發的效果,我們可以添加同步計時器:

同步定時器(1)

同步定時器(2)

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

Response Times Over Time的圖形展示中,橫坐標通常代表運行時間,而縱坐標則代表響應時間(單位是毫秒)。測試人員可以根據圖形中的趨勢線來判斷響應時間的穩定性以及是否存在大的波動。例如,如果響應時間在某個時間點突然增加,這可能意味著系統在該時間點遇到了性能問題。

2.10.3 Transactions per Second(TPS)

建議看完下面的監聽器插件后再看這里。

JMeter中的 Transactions per Second(TPS)監聽器是一個用于分析系統吞吐量的重要工具。TPS,即每秒事務數,表示一個客戶機向服務器發送請求后服務器做出反應的過程。這個指標反映了系統在同一時間內處理業務的最大能力。TPS值越高,說明系統的處理能力越強。

Transactions per Second

在使用TPS監聽器時,橫坐標通常代表運行時間,而縱坐標則代表TPS值。通過監聽器展示的圖表,可以清晰地看到TPS值隨時間的變化情況。


三種監聽器

2.11 CSV數據文件設置

以登陸接口為例,當我們執行登陸接口的性能測試時,手動配置了用戶名和密碼為固定的username和password,然而實際使用中不可能只有一個用戶登陸,為了模擬更真實的登錄環境,我們需要提供更多的用戶username和password來實現登錄操作。

添加方式:線程組?配置元件?CSV數據文件設置

CSV數據文件添加方式

操作步驟:

  1. CSV數據文件設置

CSV數據文件設置

  • 文件名:填寫csv文件的路徑,建議使用絕對路徑
  • 文件編碼:UTF-8
  • 變量名稱:從csv數據文件中讀起的數據需要保存到的變量名,有多個變量時用逗號分隔
  • 是否忽略首行:是否從csv數據文件第一行開始讀取
  • 分隔符:要求與csv數據文件中多列的分隔符一致
  • 遇到文件結束符再次循環:若選擇為True當數據不夠的時候會從頭取;若選擇False,則需要勾選下面的配置,遇到文件結束符停止線程,這里如果不勾選,請求將會報錯
  1. 編寫test.csv文件,示例:

編寫test.csv文件

  1. 修改登陸接口及其他涉及到username和password獲取的參數

修改登陸接口及其他涉及到username和password獲取的參數

修改完該配置后,登陸接口發起請求時將從csv文件中獲取配置好的username和password參數,獲取順序為從上往下依次獲取

  1. 修改線程組中線程數,使得每次取到的username和password都不一樣

修改線程組中線程數

  1. 運行結果

運行結果

2.12 HTTP Cookie管理器

HTTP Cookie管理器(1)

HTTP Cookie管理器像Web瀏覽器一樣存儲和發送Cookie。如果HTTP請求并且響應包含cookie,則Cookie管理器會自動存儲該cookie,并將其用于將來對該特定網站的所有請求。每個JMeter線程都有自己的“cookie存儲區”。因此,正在測試使用cookie存儲會話信息的網站,則每個JMeter線程都將擁有自己的會話,此類Cookie不會顯示在Cookie管理器顯示屏上,可以使用“查看結果樹監聽器”查看。

緩存配置可選擇standard(標準)或compatibility(兼容的),當然也可以手工添加一些cookie。

HTTP Cookie管理器(2)

2.13 Jmeter插件

下載Jmeter插件功能:

下載Jmeter插件功能

將下載好的插件放到jmeter下lib/ext文件夾下:

將下載好的插件放到jmeter下lib/ext文件夾下

此時,jmeter界面右上角將會展示一個小蝴蝶形狀的工具,該工具即jmeter插件功能,點擊該功能可以下載jmeter中支持的各種插件:

小蝴蝶形狀的工具

在真實企業壓測場景中,我們通常為一點一點的逐步增加線程數,因此需要安裝新的插件來支持線程數的配置。

逐步增加線程數

通過插件管理工具下載其他插件:

  • 在插件中下載其他監聽器插件

其他監聽器插件

安裝監聽器插件

  • 在插件中下載線程組插件

線程組插件

點擊Apply Changes and Restart JMeter等待下載完成并重啟JMeter:

點擊Apply Changes and Restart 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文件夾下將出現以下內容:

rizhi文件夾

雙擊index.html文件,界面展示如下:

index.html文件界面

4. 性能分析

通過三大指標來分析性能問題

4.1 響應時間

如果響應時間超過了要求,代表系統到了瓶頸

注意事項:分析在多少線程的情況下發生了超標

響應時間變化的原因:

系統不穩定,有時快有時慢

隨著并發壓力變大而慢慢變慢,響應時間變高

4.2 錯誤率(可靠性)

?并發場景下,系統是否能夠正常處理業務

要求:99.99% 可靠:99.9999%

錯誤率高的原因:

接口請求錯誤

服務器無法繼續處理,達到了瓶頸(代碼寫的不好,內存泄漏、硬件資源等)

后端系統限流(系統里配置了不能超過多少并發)、熔斷、降級

什么是熔斷、降級?

熔斷:防止系統因某個服務的故障而整體崩潰。當電商平臺上用戶支付時,收銀臺發現某個支付渠道,如微信支付失敗率突增,超時嚴重,那么就可以臨時把這個支付方式熔斷掉

降級:主動關閉一些非核心功能,以確保核心功能的正常運行。某次騰訊視頻掛了的時候,用戶名稱默認顯示騰訊用戶,這也是一種降級方式,用兜底名稱做展示

4.3 吞吐量

吞吐量越大,性能越好;吞吐量相對穩定或者變低,可能系統達到了性能瓶頸

吞吐量變化規律:

波動很大:代表系統性能不穩定

慢慢變高,再趨于穩定:和并發量強相關。如果并發量小于吞吐量,慢慢增大并發量,吞吐量也會隨之增加

慢慢變低,并發量也減少了:要么說明性能測試要結束了,并發減少;也可能是系統變的卡頓,從而導致響應時間變慢,導致單個線程發起的并發量變少

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

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

相關文章

rabbitMQ如何確保消息不會丟失

rabbitmq消息丟失的三種情況 生產者將消息發送到RabbitMQ的過程中時,消息丟失。消息發送到RabbitMQ,還未被持久化就丟失了數據。消費者接收到消息,還未處理,比如服務宕機導致消息丟失。 解決方案 生產者發送過程中,…

Beetle-RP2350 擴展板設計

Beetle-RP2350 擴展板設計 本文介紹了 DFRobot Beetle RP2350 開發板的擴展板設計,包括參數特點、效果展示、原理圖、實物驗證、工程測試等,為 RP2350 系列產品的開發提供了便捷。 PCB 工程詳見:Beetle-RP2350擴展板 - 立創開源硬件平臺 . …

2025年一加7pro刷twpr / magisk / kali nethunter教程+資源下載+避坑指南

從二手市場500淘了一個一加7pro 12+256 ,根據網上教程刷機但很多坑,折騰一周后搞定,記錄下給后人避坑 資源下載:鏈接:https://pan.quark.cn/s/c16b972509f2 提取碼:mUW7 本文是主流程+避坑指南,沒有基礎的需要手把手教學的shell都不會的就別看了,直接放棄或者tb找人花錢…

java HashMap,高效 哈希

java HashMap 有獨特的設計。 哈希表數組的每個位置是一個哈希桶&#xff0c;里面由鏈表或紅黑樹實現。&#xff08;> 8 或 < 6 的變化時&#xff0c;避免頻繁切換&#xff09; 容量&#xff08;capacity&#xff09;&#xff1a; 哈希表中桶&#xff08;bucket&#xf…

【業務領域】計算機網絡基礎知識

《計算機網絡方面有哪些書籍值得推薦&#xff1f;》 知乎掃盲貼&#xff1a; 《網絡是怎么鏈接的》 初識RDMA技術——RDMA概念&#xff0c;特點&#xff0c;協議&#xff0c;通信流程 采樣 》 存儲 》傳輸 》處理 》反應 傳感器 存儲器 接口 算法/cpu 機器

List--鏈表

一、鏈表 1.1 什么是List&#xff1f; 在C語言中&#xff0c;我們需要使用結構體struct來進行List(鏈表&#xff09;的實現&#xff1a; struct ListNode {DataType Data;//DataType是任意類型的變量定義struct ListNode* next;//指向下一個結點的指針變量 }; 與之前的vect…

tensor 的計算操作

1、創建tensor 常見創建 tensor 的方法 函數 作用 torch.Tensor(*size) 通過指定尺寸&#xff0c;生成一個 值全為 0 的 tensor torch.tensor(*list) 直接通過指定數據&#xff0c;生成tensor&#xff0c;支持 List、Numpy數組 torch.eye(row, column) 按照指定的行列數…

【Java面試題04】MySQL 篇

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、MySQL 篇&#xff1a;??????1、MySQL 是如何實現事務的? 后序還在更新中~~~三、總結&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&#x1f680; ?? 你每一…

UDP/TCP協議知識及相關機制

一.UDP協議 UDP是一種無連接、不可靠、面向報文、全雙工傳輸層的協議~ 1.無連接 &#xff1a; 知道對端的端口號和IP可以直接傳輸&#xff0c;不需要建立連接 2..不可靠&#xff1a;沒有確認機制&#xff0c;沒有重傳機制&#xff0c;不知道數據包能否能正確到達對端&#xff0…

【AI面試準備】語言模型、語音、多模態等模型能力評估指標和能力邊界

面試崗位提出這個要求:掌握語言模型、語音、多模態等模型能力評估指標和能力邊界。 以下是針對語言模型、語音模型、多模態模型能力評估指標與能力邊界的結構化總結,結合高頻面試考點和實際應用場景: 目錄 **一、語言模型(LLM)評估與邊界**1. **核心評估指標**2. **能力邊…

優雅關閉服務:深入理解 SIGINT / SIGTERM 信號處理機制

目錄 為什么需要優雅關閉&#xff1f; 什么是 SIGINT 和 SIGTERM&#xff1f; 如何實現優雅關閉&#xff08;以 C 為例&#xff09; 示例代碼&#xff08;gRPC 服務 Boost 信號監聽&#xff09;&#xff1a; 優雅關閉時的清理內容通常包括&#xff1a; 與 SIGKILL 的區別…

容器化-Docker-集群

一、Docker 集群基礎概念? 1、什么是 Docker 集群? Docker 集群是由多個 Docker 主機組成的集合,這些主機通過網絡連接在一起,共同管理和運行容器。在集群中,我們可以將容器服務均勻地分布到各個節點上,實現負載均衡和資源的高效利用。Docker 集群的核心組件包括管理器…

關于kafka

1.為什么需要消息隊列 舉個經典的例子。 你是一個網購達人&#xff0c;經常在網上購物。快遞小哥到了你的小區后&#xff0c;立刻給你打電話說&#xff1a;“你的快遞到了&#xff0c;請馬上來取。” 但你是一個合格的牛馬&#xff0c;在上班&#xff0c;不方便取快遞&#…

微服務即時通信系統(十二)---入口網關子服務

目錄 功能設計 模塊劃分 業務接口/功能示意圖 服務實現流程 網關HTTP接口 網關WebSocket接口 總體流程 服務代碼實現 客戶端長連接管理封裝(connectionManage.hpp) proto文件的編寫 身份鑒權proto 事件通知proto 各項請求的URL的確定 服務端完成入口網關服務類…

存儲器層次結構:理解計算機記憶的金字塔

存儲器層次結構&#xff1a;理解計算機記憶的金字塔 在計算機系統中&#xff0c;“速度”與“成本”常常處于對立面。為了在速度與成本之間取得平衡&#xff0c;計算機體系結構采用了一種名為“存儲器層次結構&#xff08;Memory Hierarchy&#xff09;”的設計思想。本文將通…

HTTP 錯誤 500.19 - Internal Server Error

1.HTTP 錯誤 500.19 - Internal Server Error NetCore項目托管到IIS后&#xff0c;報錯如下&#xff1a; 原因是因為IIS中沒有安裝AspNetCoreModuleV2導致的&#xff0c; 1.打開IIS 2.選中服務器根節點&#xff0c;找到模塊&#xff0c;雙擊進入&#xff0c;確認模塊中是否存…

【c++】【STL】stack詳解

目錄 stack類的作用什么是容器適配器stack的接口構造函數emptysizetoppushpopswap關系運算符重載 stack類的實現 stack類的作用 stack是stl庫提供的一種容器適配器&#xff0c;也就是我們數據結構中學到的棧&#xff0c;是非常常用的數據結構&#xff0c;特點是遵循LIFO&#…

K8s學習與實踐

一、Kubernetes 核心原理 1. Kubernetes 設計哲學 Kubernetes&#xff08;k8s&#xff09;是一個開源的容器編排平臺&#xff0c;旨在自動化容器化應用的部署、擴展和管理。其核心設計圍繞以下目標&#xff1a; 聲明式配置&#xff1a;用戶描述期望狀態&#xff08;如 YAML …

Umi-OCR項目(1)

最近接觸到了一個項目&#xff0c;我在想能不能做出點東西出來。 目標&#xff1a;識別一張帶表格的圖片&#xff0c;要求非表格內容和表格內容都要識別得很好&#xff0c;并且可視化輸出為word文檔。 下面是第一步的測試代碼&#xff0c;測試是否能夠調用ocr能力。 import re…

Mioty|采用報文分割(Telegram Splitting)以提高抗干擾能力的無線通信技術【無線通信小百科】

1、什么是Mioty 在物聯網&#xff08;IoT&#xff09;快速發展的背景下&#xff0c;低功耗廣域網&#xff08;LPWAN&#xff09;技術成為連接海量設備的關鍵。LPWAN具有低功耗、低成本、廣覆蓋和強抗干擾能力等特點&#xff0c;使其特別適用于大規模、遠距離、低數據速率的IoT…