基于docker實現JMeter分布式壓測

為什么需要分布式?

在工作中經常需要對一些關鍵接口做高QPS的壓測,JMeter是由Java 語言開發,沒創建一個線程(虛擬用戶),JVM默認會為每個線程分配1M的堆棧內存空間。受限于單臺試壓機的配置很難實現太高的并發。所以,通過JMeter實現分布式,可以整合多臺主機的硬件資源,實現同時對被測試接口進行壓力測試。

圖片

Jmeter分布式測試環境中有兩個角色:Master 和 Slaves

Master節點:向參與的Slaves節點發送測試腳本,并聚合Agent節點的執行結果。

Slaves節點:接收并執行Master節點發送過來的測試腳本,并將執行結果返回給Master。

為什么要使用docker?

如果要分布式聯動每臺主機,就要求每臺主機都要有JMeter環境(JDK + JMeter),如果利用docker就可以通過docker管理 JMeter環境,簡單的拉取鏡像,啟動容器即可。

更進一步講,利用k8s、云服務可以無限的擴容JMeter試壓機,理論上多少的并發用戶都可以模擬。

準備工作

JDK:啟動 JMeter 工具需要

$ brew install openjdk@11

JMeter: 編寫JMeter腳本

https://archive.apache.org/dist/jmeter/binaries/

圖片

編寫一個簡單的腳本。

docker: 通過doker創建容器。

$ docker pull runcare/jmeter-master
$ docker pull runcare/jmeter-slave

查看docker鏡像

$ docker imagesREPOSITORY              TAG        IMAGE ID       CREATED         SIZE
runcare/jmeter-master   latest     e052a8cd8680   3 years ago     326MB
runcare/jmeter-slave    latest     05c7ba96d97d   3 years ago     326MB

請記住 jmeter-master 的鏡像ID e052a8cd8680,后面會用到。

分布式壓測使用

啟動 slave 節點。

假設有兩臺主機,可以啟動兩個slave。

$ docker run -it -d --name slave01 runcare/jmeter-slave
$ docker run -it -d --name slave02 runcare/jmeter-slave

查看啟動的容器

$ docker psCONTAINER ID   IMAGE                  COMMAND                   CREATED             STATUS             PORTS                 NAMES
b270636a7741   runcare/jmeter-slave   "/bin/sh -c 'jmeter-…"   43 seconds ago      Up 42 seconds      1099/tcp, 60001/tcp   slave01
2584c7fef5f8   runcare/jmeter-slave   "/bin/sh -c 'jmeter-…"   52 seconds ago      Up 50 seconds      1099/tcp, 60001/tcp   slave02

查看兩個slave 的IP 地址

$ docker inspect -f '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(docker ps -q)/slave01 => 172.17.0.3
/slave02 => 172.17.0.2
/k8s_nginx_nginx-deployment1-fc7586d97-jvjvk_nginx_4379ed7f-b0be-4f9f-a0a9-4a5fd7b45b38_1 => 
/k8s_nginx_nginx-deployment1-fc7586d97-bztbh_nginx_6968e6b1-6689-4f1a-a9ea-04532577841c_1 => 

發送壓測腳本到 slave

$ result=`date +"%Y%m%d%H%M%S"` && docker run --rm -v /Users/fnngj/zhpro/script:/data e052a8cd8680 jmeter -n -t /data/baidu_script.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.17.0.2,172.17.0.3

參數說明

result=date +“%Y%m%d%H%M%S”`: 指定測試結果的名稱,以當前日期時間命名。

/Users/fnngj/zhpro/script : 壓測腳本的目錄,測試結果也會存放到該目錄下。

baidu_script.jmx : 壓測腳本的名稱,存放于 /Users/fnngj/zhpro/script目錄下。

e052a8cd8680 : jmeter-master 的鏡像ID。

172.17.0.2,172.17.0.3 :兩臺 slave 的IP 地址。

測試結果

執行完的目錄

$ pwd
/Users/fnngj/zhpro/script$ ls
20230707005328     20230707005328.jtl 20230707005328.log baidu_script.jmx

查看報告

進入20230707005328 目錄,點擊 index.html 文件,可以看到壓測的結果。

圖片

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?

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

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

相關文章

LeetCode59.螺旋矩陣

LeetCode59.螺旋矩陣 1.問題描述2.解題思路3.代碼 1.問題描述 給你一個正整數 n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 輸入:n 3 輸出:[[1,2,3],[8,9,…

Codeforces Round 822 (Div. 2)(D前綴和+貪心加血量)

A.選三條相鄰的邊遍歷一次求最小值 #include<bits/stdc.h> using namespace std; const int N 1e610,mod1e97; #define int long long int n,m; vector<int> g[N]; int a[N]; void solve() {cin>>n;int res2e18;for(int i1;i<n;i) cin>>a[i];sort…

談一談什么是接口測試?怎樣做接口測試?

掃盲內容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些類型&#xff1f; 3.接口的本質是什么&#xff1f; 4.什么是接口測試&#xff1f; 5.問什么要做接口測試&#xff1f; 6.怎樣做接口測試&#xff1f; 7.接口測測試點是什么&#xff1f; 8.接口測試都要掌…

童裝店鋪如何通過軟文增加客流量

在信息超負載、媒介粉塵化、產品同質化多重因素下&#xff0c;傳統營銷疲態盡顯、日漸式微&#xff0c;很難支撐新環境下品牌和企業的持續增長。聚焦童裝行業更是如此&#xff0c;一方面用戶迭代速度快&#xff0c;另一方面&#xff0c;新時代父母的育兒觀念更加精細化&#xf…

安裝pytorch

cuda≤11.6&#xff0c;觀察控制面板 觀察torch對應cuda版本 https://download.pytorch.org/whl/torch/ 安裝cuda11.6.0 CUDA Toolkit Archive | NVIDIA Developer cmd輸入nvcc -V 編輯國內鏡像源 .condarc anaconda prompt輸入 查看環境 conda env list 安裝py3.9…

MySQL面試,MySQL事務,MySQL鎖,MySQL集群,主從,MySQL分區,分表,InnoDB

文章目錄 數據庫-MySQLMySQL主從、集群模式簡單介紹1、主從模式 Replication2、集群模式3、主從模式部署注意事項 UNION 和 UNION ALL 區別分庫分表1.垂直拆分2、水平拆分 MySQL有哪些數據類型1、整數類型**&#xff0c;2、實數類型**&#xff0c;3、字符串類型**&#xff0c;4…

DDoS攻擊頻發,科普防御DDoS攻擊的幾大有效方法

談到目前最兇猛、頻率高&#xff0c;且令人深惡痛絕的網絡攻擊&#xff0c;DDoS攻擊無疑能在榜上占有一席之地。各種規模的企業報包括組織機構都可能受到影響&#xff0c;它能使企業宕機數小時以上&#xff0c;給整個互聯網造成無數損失。可以說&#xff0c;怎樣防御DDoS攻擊是…

python的多層嵌套循環時,break可以退出多層循環嗎?

在Python中&#xff0c;break 語句只能退出當前所在的循環&#xff0c;無法直接退出多層嵌套的循環。但是&#xff0c;你可以通過使用一個標志變量或者通過使用異常來模擬退出多層循環的效果。 使用標志變量&#xff1a; flag False for i in range(5):for j in range(5):if…

Vue 定義只讀數據 readonly

readonly 讓一個響應式數據變為 **深層次的只讀數據**。 isReadonly 判斷一個數據是不是只讀數據。 應用場景&#xff1a;不希望數據被修改時使用。 readonly 深層次只讀&#xff1a; <template><h1>reactive數據</h1><p>姓名&#xff1a;{{ info…

嵌入式系統中相關的高質量開源項目

關于GitHub&#xff0c;可能很多人誤以為這是互聯網人的專屬&#xff0c;其實并不是&#xff0c;那上面嵌入式相關的開源項目是有很多的。現分享一些高星開源項目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介紹了&#xff09;&#xff1a;Avem 項目鏈接&#xff1a; ht…

多功能神器,強勁升級,太極2.x你值得擁有!

嗨&#xff0c;大家好&#xff0c;今天給大家分享一個好用好玩的軟件。那就是太極2.x軟件&#xff0c;最近在1.0版本上進行了全新升級&#xff0c;升級后的功能更強更穩定&#xff0c;輕度用戶使用基本功能就已經足夠了&#xff0c;我們一起來看看吧&#xff01; 首頁 首頁左…

通過ESXi Shell修改ESXi服務器時區

ESXi Shell是ESXi服務器的命令行界面&#xff0c;用戶可以通過它來執行系統命令和管理操作。下面是通過ESXi Shell修改ESXi服務器時區的步驟&#xff1a; 1. 在ESXi服務器上開啟SSH服務&#xff0c;并使用SSH客戶端連接到ESXi服務器。 2. 輸入以下命令來查看當前時…

利用叉積計算向量的旋向及折線段的拐向

一、向量叉積 兩個向量 u u u、 v v v的叉積寫作 u v n ∥ u ∥ ∥ v ∥ s i n θ \mathbf{u \times v n \left \| u \right \| \left \| v \right \| sin\theta } uvn∥u∥∥v∥sinθ 式中&#xff0c; n n n: 與 u u u、 v v v均垂直的單位向量&#xff0c;theta是兩向量…

webpack的鉤子集合

總之有這么多鉤子可以用&#xff1a; entryOption&#xff1a;在entry配置項處理前被調用&#xff0c;可以修改entry配置項&#xff1b;beforeRun&#xff1a;在運行編譯器前被調用&#xff1b;run&#xff1a;在開始讀取記錄時被調用&#xff1b;emit&#xff1a;生成資源到ou…

Java 編碼

編碼: 加密: 通過加密算法和密鑰進行 也可通過碼表進行加密 對稱加密: 缺點:可被截獲 元數據---加密算法密鑰密文 ----> 解密算法密鑰元數據 算法:DES(短 56位),AES(長 128位)破解時間加長 非對稱加密: 元數據-加密算法加密密鑰 密文 --->加密算法解密密鑰元數據 …

mysql面試內容點

left join和inner join的區別 1.返回不同 innerjoin只返回兩個表中聯結字段相等的行。left join返回包括左表中的所有記錄和右表中聯結字段相等的記錄。 2.數量不同 inner join的數量小于等于左表和右表中的記錄數量。left join的數量以左表中的記錄數量相同。 3.記錄屬性不同…

C++學習——C++運算符重載(含義、格式、示例、遵循的規則)

以下內容源于C語言中文網的學習與整理&#xff0c;非原創&#xff0c;如有侵權請告知刪除。 一、運算符重載的含義 所謂重載&#xff0c;就是賦予新的含義。函數重載&#xff08;Function Overloading&#xff09;可以讓一個函數名有多種功能&#xff0c;在不同情況下進行不同…

Vue 重寫push和replace方法,解決:Avoided redundant navigation to current location

當我們使用編程式路由導航跳轉路徑時&#xff0c;如果我們兩次攜帶同樣的參數進行跳轉&#xff0c;會進行頁面報錯&#xff1a; 那產生這個問題的原因是什么呢&#xff1f; 我們接收并輸出調用push方法返回的結果&#xff1a; 會發現這是一個Promise對象 我們都知道&#xff…

SAP_ABAP_面試篇_關于Function Module函數的三種處理類型

關于 Function Module 這個技術點&#xff0c;在面試過程中一般會考察以下幾個問題&#xff1a; 1 函數處理類型的更新模式 一般會問到異步和事務&#xff08;邏輯單元 LUW&#xff09;&#xff0c;異步函數的調試方式、SM13監控更新函數的執行過程&#xff08;V1 與 V2 模式…

Epub書籍閱讀工具

Epub書籍閱讀工具 前言WIndows總結Neat ReaderAquile ReaderWPS Android總結Neat Reader掌閱 前言 Epub文件為電子書文件格式&#xff0c;此格式的電子書相比txt書籍&#xff0c;增加了目錄跳轉功能&#xff0c;并可以顯示圖片。本文介紹WIndows和Android端的epub書籍閱讀工具…