Jmeter 壓測保姆級入門教程

1、Jmeter本地安裝

1.1、下載安裝

軟件下載地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/
選擇一個壓縮包下載即可
在這里插入圖片描述
然后解壓縮后進入bin目錄直接執行命令jmeter即可啟動

在這里插入圖片描述

1.2 修改語言

默認是英文的,修改中文,點擊選項-》選擇語言-》簡體中文
在這里插入圖片描述

1.3 必備插件安裝

jmeter內置的常用的插件不是很多,如果要額外安裝其他插件需要先下載一個插件安裝工具的jar包然后放到jmeter的目錄下才能使用插件安裝工具的功能。

  1. 插件安裝工具下載地址

在這里插入圖片描述
2) 下載jar包之后放到 jmeter的 /lib/ext 目錄下,重啟Jmeter即可。

3 打開插件管理。 選項-》 插件管理器
在這里插入圖片描述

  1. 點擊可用插件tab,然后勾選安裝即可
    在這里插入圖片描述

推薦勾選: 帶jpgc相關的插件,可以做梯度增壓

1.4 修改Jmeter的堆內存

由于壓測是通過Jmeter這個Java程序去跑的,所以壓測的性能和能開啟的線程數量都與這個程序本身運行的環境以及配置有關。 一般Jmeter部署在服務器那邊性能會更強。

修改jmeter的 /bin/jmeter 文件 (mac環境),如果是window修改 jmeter.bat 。 修改下圖的這一行就是調整堆內存信息

${HEAP:=“-Xms1g -Xmx8g -XX:MaxMetaspaceSize=656m”}

在這里插入圖片描述
驗證是否修改成功,重啟使用jconsole工具連接Jmeter進程查看jvm信息即可看到是否修改成功。 或者使用jps命令查看進程號然后再jmap命令查看堆內存分配情況。

在這里插入圖片描述

2、 Jmeter操作說明

2.1、測試計劃

默認打開的界面如下, 一份測試計劃就是一份jmx文件,點擊保存就會彈出保存地址。 測試計劃就是包含此次做壓測的所有信息。 支持導入導出。
在這里插入圖片描述

2.2 測試計劃界面介紹

異常信息

  • 右上角那個小三角可以看到jemter的執行信息,如果你的壓測執行不了可以去里面看看一般是報錯了

用戶自定義變量

  • 可以在這里配置壓測的全局變量,這樣我們在使用的時候就不用傳具體的值,傳變量的值即可。 這樣以后要修改的話只需要修改這里的變量值就可以了就不用到處都修改了。
  • 比如我們壓測的接口的域名肯定是都一樣所以一般會提取出來做全局變量。比如下面配置全局變量域名host, 然后使用的時候就直接配 ${host}即可。
    在這里插入圖片描述

2.3、配置元件

默認支持的配置元件列表,主要作用就是配置我們壓測接口的一些參數配置
在這里插入圖片描述

2.3.1、Http請求默認值

操作: 右鍵點擊測試計劃-》 添加-》 配置元件-》 Http請求默認值組件

作用

  • 一般壓測的接口的很多請求參數可能是一致的。 所以這里可以設置壓測接口時的默認請求參數。 這樣就不用每次配壓測接口都去配置,默認會帶上這里配置的請求參數。

在這里插入圖片描述

比如下圖配置默認的http協議,以及默認的域名。 這里的域名配置就使用我們前面配置的全局變量 ${host}
在這里插入圖片描述

2.3.2、HTTP信息頭管理器

操作: 右鍵點擊測試計劃-》 添加-》 配置元件-》 HTTP信息頭管理器

作用

  • Http請求默認值配置元件類似,都是配置壓測接口的請求默認值。 不過這個元件就像其名字一樣配置的是默認的Http請求頭信息,這樣壓測接口就不用再配置Http請求頭信息默認會帶上
  • 比如我們可以配置常用的默認的請求頭Content-TypeCookie 。 尤其是Cookie請求頭 這樣即使是登錄接口也能進行調通。

在這里插入圖片描述

2.3.3、CSV Data Set Config

操作: 右鍵點擊測試計劃-》 添加-》 配置元件-》 CSV Data Set Config

作用

  • 一般用于模擬生成不同的請求參數。 因為一般我們對一個接口進行壓測真實的場景是請求參數是不同的

具體配置如下:

  • 主要是先配置一個csv文件的地址,然后指定列頭變量字段名。 之后再配置壓測接口的時候就可以把使用這些變量字段名。使用格式為: {變量名稱}。 比如下面配置使用格式就是 {userName}.
  • 這樣在請求壓測接口的時候就會來隨機讀取這個csv文件的這個變量對應的列的某一個的值, 一般我們就是通過這個組件去模擬不同的請求參數。

在這里插入圖片描述

2.4、線程組

線程組就是用來模擬并發的數量以及并發的行為。 比如你是要啟動10個并發還是100個并發去壓測接口就是通過這個組件。并且啟動壓測程序其實就是通過啟動我們的線程組的執行壓測。

自帶帶的線程組如下,其中帶gc的使我們添加插件后才有的。 不同的線程組的區別就是設置的并發行為不同

  • 比如有些線程組是一股腦配10個并發然后一直執行10分鐘。

  • 有些線程組是配置先啟動1個并發,每過5秒后再啟動10個并發,當到達100個并發后就執行10分鐘。
    在這里插入圖片描述

2.4.1、普通線程組

操作: 右鍵點擊測試計劃-》 添加-》 線程-》 線程組
作用

  • 下圖就是我們配置一個線程組, 配置了20個并發,然后在5秒內啟動完20個并發,當執行10000伺候就停止壓測。
    在這里插入圖片描述

具體該配置的并發行為可以用下圖來形象的表示。 可以看到一開始是0個并發,然后隨著時間增加不短增加并發,最終在第5秒達到最大并發20,然后就一直20個并發一直執行。
在這里插入圖片描述

2.4.2、梯度線程組(Stepping Thread Group)

操作: 右鍵點擊測試計劃-》 添加-》 線程-》 jp@gc - Stepping Thread Group
作用

  • 與普通線程組的并發行為不同的是,這個線程組可以做到類似于先啟動5個并發,然后隔10秒后再啟動10個并發,當達到100個并發,持續執行30s,然后再每隔5秒降低20個并發這種更為詳細的并發行為。 而普通線程組每次只能保持固定的并發數去跑, 我們只能不斷修改這個固定的并發數去壓測以求找到接口最大的吞吐量。 下圖就形象的表示了這種駝峰式的并發行為

在這里插入圖片描述

具體配置對應的語義和并發行為如下圖所示:

  • this goup will start語義: 表示最多啟動多大線程。對應圖中的峰頂的值
  • first wait for語義: 從運行之后多長時間開始啟動線程;若設置為60秒, 對應圖中開頭的底部橫線。
  • then start語義: 表示第一次要啟動幾個線程。 對應圖中第一個上升線。
  • next add語義 + threads every 語義: 表示每隔多少秒啟動多少個線程。對應圖中的上升梯度線。
  • using ramp-up 語義: 其中與普通線程組一樣表示啟動線程的時間。 對應圖中的上升梯度線的斜度,越大越斜表示用的時間越久。
  • then hold load for語義: 表示達到最大線程后保持最大線程持續執行多久。 對應圖中的峰頂的橫線。
  • finally sotp + threads every語義: 達到峰頂后,表示每隔多少秒釋放多個線程。 對應圖中的下降梯度線。

2.5、取樣器

如果說線程組就是我們Java的線程池,那么取樣器就相當于我們線程池要執行的Runnable任務。比如我們要壓測哪個接口就可以配置成取樣器。

自帶取樣器如下

  • 操作: 右鍵線程組-》 添加-》取樣器
  • 一般我們用的比較多就是Http請求取樣器,用來壓測接口。
    在這里插入圖片描述

2.5.1、Http請求取樣器

操作: 右鍵線程組-》 添加-》取樣器-》 Http請求
作用: 主要就是用來配置Http接口的信息,包括請求域名,端口,接口路徑、接口參數等等。 有了它就可以發起請求。

在這里插入圖片描述

3、 實戰案例

此處壓測的接口代碼邏輯: 模擬執行時間是500ms

    @GetMappingpublic String getA1(){try {Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}return "33";}

3.1、 壓測接口Hello World

1、在測試計劃下面添加線程組,設置100個并發,持續執行600秒。
在這里插入圖片描述

2、添加壓測的接口
添加http取樣器,并且配置接口信息

在這里插入圖片描述

3、添加接口執行結果監聽器
操作: 右鍵線程組-》添加-》監聽器-》查看結果樹。
這樣我們接口是否調通以及返回結果都可以看到
在這里插入圖片描述

4、添加壓測接口匯總報告
操作: 右鍵線程組-》添加-》監聽器-》匯總報告。
這樣看到這個線程組壓測的統計報告,包括吞吐量TPS、響應時間、是否異常,網絡請求量,執行次數。

在這里插入圖片描述

5、添加吞吐量TPS實時統計圖(可忽略)
操作: 右鍵線程組-》添加-》監聽器-》jp@gc - Transactions per Second。
這樣就可以監測吞吐量的實時變化情況。
在這里插入圖片描述

5、添加響應時間實時統計圖(可忽略)
操作: 右鍵線程組-》添加-》監聽器-》jp@gc - Response Times Over Time
這樣就可以監測接口響應時間的實時變化情況。

在這里插入圖片描述

5、添加激活線程實時統計圖(可忽略)
操作: 右鍵線程組-》添加-》監聽器-》jp@gc - Active Threads Over Time
這樣就可以監測線程組的并發行為,因為線程組的組件有很多,如果不是非常熟悉可能都不知道自己配置的線程組正在模擬什么樣的并發行為。

在這里插入圖片描述

7、啟動線程組執行壓測
操作: 右鍵線程組-》啟動
原理: 線程組會去并發執行線程組下面配置的所有取樣器(這里只添加了一個還可添加多個)

最后我們看下各部分壓測結果:

1、首先是接口執行情況:

  • 都是綠色表示接口調通,并且右側可看到接口響應結果。

在這里插入圖片描述

2、看一下壓測匯總報告統計

可以看到樣本數就是總共請求的數量, 平均值就是平均響應時間(單位是毫秒)結果跟我們接口代碼邏輯還是一致的,最小值和最大值也是接口響應時間。 異常率就是接口調不通(吞不下)的概率。 吞吐量就是每秒能處理168個請求。
在這里插入圖片描述

3、看一下吞吐量變化情況
隨著并發數增加,最終一直維持在180到200的吞吐量之間
在這里插入圖片描述

3、看下響應時間的變化
基本維持在500ms左右
在這里插入圖片描述

3.2、 模擬不同的請求參數

1、新建一個CSV文件,里面放我們不同的請求參數,比如內容為

userId,userName
1,	zhangShan
2,  liSi
3,  xaioming

2、新增CSV 數據文件設置組件
將我們剛才新增的csv文件路徑配到這里,然后配置變量名,并且設置忽略首行(因為我們的csv文件內容首行不是請求參數)
在這里插入圖片描述

3、在Http取樣器里面直接使用變量即可。
請求參數要使用變量地方就用{}包起來就行。
原理就是請求的時候會去隨機讀取該文件的的這個字段的值從而達到模擬不同請求參數的效果
在這里插入圖片描述

3.3、 如何請求要登錄驗證的接口

這個看你們的登錄驗證邏輯,假如我們的登錄信息是放在cookies里面,那么我們就可以添加HTTP信息頭管理器,然后在里面配置cookie請求頭信息。只要把我們的登錄cookies放進去就可以執行成功。

在這里插入圖片描述

缺點就是cookie失效后每次要重新配置,具體還有其他更自動化的解決方法

3.4、 接口如何上傳文件

接口配置那選擇文件上傳, 配置配置具體的配置路徑即可。會去讀取上傳。 然后參數名稱寫死file就行。 然后MIME根據具體來。 一般是application/octet-stream 或者 multipart/form-data即可。
如果要模擬上傳不同的文件,同上面模擬不同請求參數一樣,這里用變量填充代表文件路徑即可。
在這里插入圖片描述

3.5、 如何在服務端執行Jmeter壓測(重要)

之前我們是通過本地Jmeter的GUI界面去進行壓測的。但是官方不建議壓測通過GUI模式去跑,而是使用CLI命令行的模式去跑壓測。 所以我們得先準備測試計劃文件.jmx, 然后使用jmeter的命令去跑測試計劃。最終會將測試計劃的結果報告保存到指定的文件。

具體命令:

jmeter -n -t [xxx.jmx] -l [results file] -e -o [Path to web report folder]
  • -n:非GUI模式,即在非客戶端模式下運行JMeter
  • -t:指定待執行的JMeter腳本
  • xxx.jmx是要被執行的JMeter測試計劃腳本即在JMeter客戶端保存的腳本
  • -l: 指定相關結果到指定的文件中
  • results file就是壓測結果保存的文件名,默認存放在命令行當前目錄下
  • Path to web report folder 就是報告目錄路徑

其實細心的可能會發現我們啟動jmeter的日志輸出默認就是告訴我們應該這樣做
具體的官方文檔: https://jmeter.apache.org/usermanual/best-practices.html

image.png

以下是我的執行命令案例:

jmeter -n -t 1.1版本xx測試計劃.jmx -l result.txt -e -o report

(base) ?  tmp6 ll
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx測試計劃.jmx
(base) ?  tmp6 jmeter -n -t 1.1版本xx測試計劃.jmx -l result.txt -e -o report
Creating summariser <summary>
Created the tree successfully using 1.1版本xx測試計劃.jmx
Starting standalone test @ November 23, 2023 2:21:03 PM CST (1700720463057)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +      1 in 00:00:01 =    1.6/s Avg:   556 Min:   556 Max:   556 Err:     0 (0.00%) Active: 13 Started: 13 Finished: 0
summary +    299 in 00:00:06 =   50.9/s Avg:   509 Min:   504 Max:   556 Err:     0 (0.00%) Active: 0 Started: 100 Finished: 100
summary =    300 in 00:00:07 =   46.0/s Avg:   510 Min:   504 Max:   556 Err:     0 (0.00%)
Tidying up ...    @ November 23, 2023 2:21:09 PM CST (1700720469740)
... end of run
(base) ?  tmp6 ll
total 216
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx測試計劃.jmx
-rw-r--r--  1 burukeyou  staff    44K 11 23 14:21 jmeter.log
drwxr-xr-x  6 burukeyou  staff   192B 11 23 14:21 report
-rw-r--r--  1 burukeyou  staff    41K 11 23 14:21 result.txt

可以發現跑完壓測報告后最終在生成了result.txt文件和report目錄,進入report目錄找到index.html瀏覽器打開即可看到報告如下

image.png

jmeter -n -t [xxx.jmx] -l [results file]執行壓測也可不指定 Path to web report folder參數。 只生成 results file. 然后通過 jmeter -g result.txt -o output 命令使用結果文件去生成Html報告。

比如:

(base) ?  tmp6 ll
total 136
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx測試計劃.jmx
-rw-r--r--  1 burukeyou  staff   5.3K 11 23 14:26 jmeter.log
-rw-r--r--@ 1 burukeyou  staff    41K 11 23 14:21 result.txt
(base) ?  tmp6 jmeter -g result.txt -o output 
(base) ?  tmp6 ll
total 152
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx測試計劃.jmx
-rw-r--r--  1 burukeyou  staff    14K 11 23 14:29 jmeter.log
drwxr-xr-x  6 burukeyou  staff   192B 11 23 14:29 output
-rw-r--r--@ 1 burukeyou  staff    41K 11 23 14:21 result.txt

如果看壓測的每個請求結果響應類似GUI界面那樣,可以在jmeter的GUI界面的查看結果樹組件的瀏覽那里導入結果文件即可。

image.png

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

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

相關文章

關于解決C# WinForm中Chart控件增刪數據時報錯的解決方法

1.報錯代碼 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能無法執行枚舉操作。具體報錯表現為,在Application.Run(Form1())中斷。 2.解決方法 這個錯誤通常是由于在枚舉集合時對集合進行了修改而引起的。在修改完chart控件中的內容后,可能會…

Linux---常用命令匯總

文章目錄 關于目錄操作的命令ls/llcdpwdmkdir 關于文件操作的命令touchechocatrmmvcpvim 關于查詢操作的命令greppsnetstat 關于目錄操作的命令 ls/ll ls : 列出當前目錄下的目錄和文件&#xff08;以行的展示形式&#xff09; ll &#xff1a; 列出當前目錄下的目錄和文件&…

Django之Cookie與Session,CBV加裝飾器

前言 會話跟蹤技術 在一個會話的多個請求中共享數據&#xff0c;這就是會話跟蹤技術。例如在一個會話中的請求如下&#xff1a; ? 請求銀行主頁&#xff1b; 請求登錄&#xff08;請求參數是用戶名和密碼&#xff09;&#xff1b;請求轉賬&#xff08;請求參數與轉賬相關的數…

Thread類常用成員方法

點擊鏈接返回標題-> Java線程的學習-CSDN博客 目錄 前言 有關線程名字的成員方法&#xff1a; String getName() void setName(String name) Thread(String name) 獲取線程對象的成員方法&#xff1a; static Thread currentThread() 讓線程睡眠的成員方法&#xff1…

時間序列分析算法的概念、模型檢驗及應用

時間序列分析是一種用于研究隨時間變化的數據模式和趨勢的統計方法。這類數據通常按照時間順序排列&#xff0c;例如股票價格、氣溫、銷售額等。時間序列分析的目標是從過去的觀測中提取信息&#xff0c;以便預測未來的趨勢。 以下是關于時間序列分析的一些重要概念、模型檢驗…

python 數據類型之集合

常見的數據類型&#xff1a; int&#xff0c;整數類型&#xff08;整形&#xff09;bool&#xff0c;布爾類型str&#xff0c;字符串類型list&#xff0c;列表類型tuple&#xff0c;元組類型dict&#xff0c;字典類型&#xff0c;一個容器且元素必須是鍵值對。set&#xff0c;…

I Doc View在線文檔預覽系統RCE漏洞(QVD-2023-45061)

0x01 產品簡介 iDocView是一個在線文檔解析應用&#xff0c;旨在提供便捷的文件查看和編輯服務。 0x02 漏洞概述 漏洞成因 本次漏洞出現在在線文檔解析應用中的遠程頁面緩存功能。具體問題在于該應用未能對用戶輸入的URL進行充分的安全驗證&#xff0c;從而導致存在安全隱患…

前端實現菜單快速檢索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

紅隊攻防實戰之內網穿透隱秘隧道搭建

別低頭&#xff0c;皇冠會掉&#xff1b;別流淚&#xff0c;賤人會笑。 本文首發于先知社區&#xff0c;原創作者即是本人 0x00 前言 構建內網隱蔽通道&#xff0c;從而突破各種安全策略限制&#xff0c;實現對目標服務器的完美控制。 當我們從外網成功獲得攻擊點的時候&…

SAP BAPI For LU01/LU04 記賬更改

場景&#xff1a;采購收貨質檢放行的時候&#xff0c;發現存在有些做QA11的時候&#xff0c;進入到TR-ZONE中&#xff0c;沒有進入到指定的倉位 解決方案&#xff1a;前端通過LU04進入&#xff0c;可以查看到一些未清的記賬更改通知單&#xff0c;點擊工具欄上的創建轉儲單&am…

Docker Swarm總結+service創建和部署、overlay網絡以及Raft算法(2/3)

博主介紹&#xff1a;Java領域優質創作者,博客之星城市賽道TOP20、專注于前端流行技術框架、Java后端技術領域、項目實戰運維以及GIS地理信息領域。 &#x1f345;文末獲取源碼下載地址&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&#x1f3fb;…

新的預測模型的局部評價指標-pAUROCc

新的預測模型的局部評價指標-pAUROCc Background 局部評價主要是用在不平衡數據上&#xff0c;其合理性&#xff1a;1.局部評價比全局評價敏感&#xff0c;更容易區分模型的優劣&#xff1b;2.臨床決策曲線&#xff08;DCA&#xff09;可知&#xff0c;模型使用過程中&#x…

什么是JSX

在React組件中&#xff0c;JSX&#xff08;JavaScript XML&#xff09;是一種語法擴展&#xff0c;用于描述組件的結構和外觀。JSX允許我們在JavaScript中編寫類似HTML的標記語言&#xff0c;以創建React元素。 在React組件中&#xff0c;render方法是用于定義并返回組件的結構…

HarmonyOS開發(六):構建簡單頁面

1、Column&Row組件 1.1、概述 一個頁面由很多組件組成&#xff0c;如果需要把這些組件組織起來布局好&#xff0c;需要借助容器組件來實現。 容器組件是一種特殊的組件&#xff0c;它可以包含其他組件&#xff0c;而且按照一定的規律布局&#xff0c;一個容器組件中可以…

Linux--初識和基本的指令(2)

目錄 前言 1. 指令 1.1 cd其它攜帶指令 1.2 ls其它攜帶指令 1.3 which指令 1.4 alias指令 1.5 mkdir其他攜帶指令 1.7 yum -y install 安裝指令 1.8 stat指令 1.9解決指令失控狀態 1.10 rmdir&&rm指令 1.11 man指令 1.12 cp指令 1.13 mv指令 1.14 nano…

vue項目引入中國地圖

先安裝有china.js的版本 npm install echarts4.8 --save //以前的版本有china.js <template><div class"mapMain"><div id"map" style"width: 30vw; height: 30vw;" /></div> </template><script>//引入文…

提高蘋果企業簽名穩定性的關鍵方法包括幾點

提高蘋果企業簽名穩定性的關鍵方法包括以下幾點&#xff1a; 控制簽名量&#xff1a;蘋果企業簽名的穩定性與每本書的簽發量有很大的關系。一般來說&#xff0c;每本書上簽10個APP和每本書上簽100個APP是兩種不同的概念。為了提高穩定性&#xff0c;正規的簽名平臺會嚴格控制每…

「純電」廝殺,廣州車展的年末大戲

作者 |張祥威 編輯 |德新 年末的廣州車展&#xff0c;揭開純電動車激烈廝殺的一角。 1100多款車型亮相在這屆車展&#xff0c;其中新能源車有460多輛&#xff0c;占接近一半比例。這其中&#xff0c;人們的焦點又放在十多款純電車型上。 造車新勢力中&#xff0c;理想的首款…

什么是數據確權?

在數字化時代&#xff0c;數據已經成為一種新型資產&#xff0c;”新的石油“&#xff0c;具有巨大的價值&#xff0c;未來世界經濟競爭一定程度上是數字經濟的競爭&#xff0c;而非工業的競爭。數據相關法律制度&#xff0c;尚且還不完整&#xff0c;推動數字經濟的發展&#…