基于Docker的JMeter分布式压测!

 一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示,一个JMeter实例将能够控制许多其他的远程JMeter实例,并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站和从站的通信如下图所示:

图片

我们需要为每个Slave/Server打开2个端口。

Server_port=1099
server.rmi.localport=50000

在客户机上打开一个端口,让从机将结果发送给主机。

client.rmi.localport=60000

通过在多台机器上运行JMeter的多个实例作为服务器,我们可以根据需要产生大量的负载。

图片

Docker
docker在这里有什么用?

Docker有点像一个虚拟机。但与虚拟机不同的是,Docker不是创建一个完整的虚拟操作系统,而是允许应用程序使用与它们所运行的系统相同的Linux内核,只要求应用程序与主机上尚未运行的东西一起运送。这使性能得到了极大的提升,并减少了应用程序的大小

Docker是一个基础设施的管理者。它能够将一个软件和它的所有依赖物打包成一个容器来运行。你可以将打包成docker镜像的软件部署到任何安装了docker的机器上。它将软件与硬件分离,因此开发者可以放心,应用程序将在任何机器上运行,无论该机器是否有任何定制的设置,可能与用于编写和测试代码的机器不同。

Docker在JMeter分布式测试中的作用
如果我们看一下上面的设置--要做分布式负载测试--我们需要1个主站和N个从站来产生巨大的负载。每台JMeter从机都需要安装特定版本的Java和JMeter。特定的端口应被打开,JMeter服务器应运行,准备并等待主站发送指令。

手动设置一些机器可能看起来很容易。如果我们要为50台、100台、1000台机器做这件事呢?想象一下,如果我们将来需要在所有的机器上升级JMeter版本,会发生什么?这就是docker出现的原因。

我们基本上在一个叫做Dockerfile的文件中设置了JMeter分布式测试的整个基础设施。检查这些dockerfile,并阅读注释以了解每一步的作用。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

Dockerfile用于JMeter基础:
在分布式测试中,所有的环境都要有相同版本的Java、JMeter和插件等。主站和从站之间的唯一区别是暴露的端口和运行的进程。因此,让我们创建一个Docker文件,其中有主站和从站的所有共同步骤。让我们把它称为jmbase镜像,我们需要做以下工作来建立我们的基础镜像。

我们需要Java8 - 所以让我们打开jdk-8-jre瘦身版,以保持尽可能小的体积。
我们可能需要一些实用程序,如wget、unzip、telnet等。所以让我们安装它们。
我们需要最新版本的JMeter。为版本创建一个变量--这样以后的维护就会更容易。
添加一个包含所有插件的文件夹。
添加一个包含样本测试的文件夹。

# Use Java 8 slim JRE
FROM openjdk:8-jre-slim
MAINTAINER TestAutomationGuru# JMeter version
ARG JMETER_VERSION=3.3# Install few utilities
RUN apt-get clean && \apt-get update && \apt-get -qy install \wget \telnet \iputils-ping \unzip# Install JMeter
RUN   mkdir /jmeter \&& cd /jmeter/ \&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz \&& tar -xzf apache-jmeter-$JMETER_VERSION.tgz \&& rm apache-jmeter-$JMETER_VERSION.tgz# ADD all the plugins
ADD jmeter-plugins/lib /jmeter/apache-jmeter-$JMETER_VERSION/lib# ADD the sample test
ADD sample-test sample-test# Set JMeter Home
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VERSION/# Add JMeter to the Path
ENV PATH $JMETER_HOME/bin:$PATH

用于JMeter客户端/主站的Dockerfile
Master dockerfile应继承自基础镜像,并应暴露60000端口:

# Use vinsdocker base image
FROM vinsdocker/jmbase
MAINTAINER TestAutomationGuru# Ports to be exposed from the container for JMeter Master
EXPOSE 60000
Dockerfile for JMeter Server / Slave:

服务器docker文件应该从基础镜像中继承,并且应该暴露1099和50000端口。jmeter-server应该正在运行

# Use vinsdocker base image
FROM vinsdocker/jmbase
MAINTAINER TestAutomationGuru# Ports to be exposed from the container for JMeter Slaves/Server
EXPOSE 1099 50000# Application to run on starting the container
ENTRYPOINT $JMETER_HOME/bin/jmeter-server \-Dserver.rmi.localport=50000 \-Dserver_port=1099

正如你在上面的Dockerfile中看到的,如果我们需要改变Java/JMeter的版本/端口,我只需要更新dockerfile,Docker会处理剩下的事情。

我已经将这些Dockerfile推送到vinsdocker账户下的docker hub中。因此,任何人都可以提取这些文件并建立JMeter分布式测试基础设施。

确保docker已经安装在你的机器上。一旦安装完毕,剩下的就很容易了。你只需要遵循这里的步骤。
逐一运行以下命令:

sudo docker run -dit --name slave01 vinsdocker/jmserver /bin/bash
sudo docker run -dit --name slave02 vinsdocker/jmserver /bin/bash
sudo docker run -dit --name slave03 vinsdocker/jmserver /bin/bash

Docker会自动提取我上传的docker镜像,并为JMeter服务器创建3个容器。如果你需要更多的容器,继续执行上述命令,只需改变容器名称即可。

运行下面的命令,为JMeter主服务器创建一个容器

sudo docker run -dit --name master vinsdocker/jmmaster /bin/bash

运行下面的命令可以看到所有正在运行的容器和打开的端口等:

sudo docker ps –a

图片

运行下面的命令来获得这些容器的IP地址列表:

sudo docker inspect --format '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(sudo docker ps -a -q)

图片

我在docker镜像中包含了一个运行了30秒的样本测试,其中有5个并发用户,你可以在容器中看到。路径。/sample-test/sample-test.jmx

如果 - 你需要从主机复制任何文件到docker容器 - 你可以发出以下命令。例如:我把测试复制到我的JMeter主容器中。这个命令将把我的本地jmeter测试(docker-test.jmx)复制到主容器的这个路径中:

/jmeter/apache-jmeter-3.3/bin/docker-test.jmx

sudo docker exec -i master sh -c 'cat > /jmeter/apache-jmeter-3.3/bin/docker-test.jmx' < docker-test.jmx

用下面的命令进入容器内部,我们可以看到文件是否被成功复制了:

sudo docker exec -it master /bin/bash

让我们在主服务器上运行测试,看看它是否工作正常[不是在分布式模式下]。Docker容器将能够运行JMeter测试,因为它拥有运行JMeter测试的所有软件和依赖:

jmeter -n -t sample-test/sample-test.jmxCreating summariser <summary>Created the tree successfully using sample-test/sample-test.jmxStarting the test @ Thu Dec 21 17:14:59 UTC 2017 (1513876499683)Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445summary +      1 in 00:00:01 =    1.5/s Avg:   265 Min:   265 Max:   265 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0summary +    336 in 00:00:29 =   11.4/s Avg:   112 Min:    87 Max:   325 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0summary =    337 in 00:00:30 =   11.2/s Avg:   113 Min:    87 Max:   325 Err:     0 (0.00%)summary +      4 in 00:00:00 =  210.5/s Avg:    97 Min:    93 Max:   109 Err:     0 (0.00%) Active: 0 Started: 5 Finished: 5summary =    341 in 00:00:30 =   11.3/s Avg:   113 Min:    87 Max:   325 Err:     0 (0.00%)Tidying up ...    @ Thu Dec 21 17:15:30 UTC 2017 (1513876530127)... end of run

就这样了。现在我们已经准备好使用docker容器在分布式中运行我们的测试。我们只需要添加-R[slave01,slave02,slave03]

jmeter -n -t sample-test/sample-test.jmx -R172.17.0.5,172.17.0.6,172.17.0.7Creating summariser <summary>Created the tree successfully using sample-test/sample-test.jmxConfiguring remote engine: 172.17.0.5Configuring remote engine: 172.17.0.6Configuring remote engine: 172.17.0.7Starting remote enginesStarting the test @ Thu Dec 21 17:01:48 UTC 2017 (1513875708955)Remote engines have been startedWaiting for possible Shutdown/StopTestNow/Heapdump message on port 4445summary +      4 in 00:00:11 =    0.4/s Avg:   182 Min:    98 Max:   232 Err:     0 (0.00%) Active: 15 Started: 15 Finished: 0summary +   1021 in 00:00:20 =   51.5/s Avg:   111 Min:    85 Max:   283 Err:     0 (0.00%) Active: 0 Started: 15 Finished: 15summary =   1025 in 00:00:30 =   33.7/s Avg:   111 Min:    85 Max:   283 Err:     0 (0.00%)Tidying up remote @ Thu Dec 21 17:02:20 UTC 2017 (1513875740196)... end of run

如果你已经注意到,我们在同一台主机上创建了所有的容器。也就是说,JMeter和JMeter从机都在同一台机器上运行。因此,所有的系统资源将被这些容器共享。

图片

总结
       在这篇文章中,我们的目的是使用Docker来创建JMeter分布式测试基础设施。如果你按照上面的步骤,你就会明白,使用docker创建测试基础设施是非常容易和快速的。我们把整个基础设施写在一个文件中,可以进行版本控制。然后我们从该文件中创建一个实例(容器)。Docker确保该容器具有所有的软件和依赖性等。你可能会问,在一台机器上运行多个jmeter服务器实例以产生更多的负载是否可以?不,这是不可以的。这根本没有帮助。事实上,一个JMeter实例比在同一主机上运行多个JMeter实例能够产生更多的负载。

那么,为什么我们要使用docker并做这些事呢?正如我上面所说,我们在这里的目的是了解docker在JMeter测试中的作用。当我们使用AWS/Digitalocean这些云计算服务提供商时,我们可以理解docker的真正用途,在那里你可以按需创建任意数量的虚拟机。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue js封装接口

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.安装axios npm install axios -g 2.在src下新建一个Api文件夹,再创建一个js文件 import axios from axios let configuration {url:"http://localhost:9090" } /*** 请求项目数据的请求体*/ async function h…

CV论文--2024.3.20

1、Graph Expansion in Pruned Recurrent Neural Network Layers Preserve Performance 中文标题&#xff1a;图扩展在修剪的循环神经网络层中保持性能 简介&#xff1a;这段摘要讨论了图的扩展性质&#xff0c;包括强连通性和稀疏性。研究表明&#xff0c;深度神经网络可以通…

linux -- I2C设备驱动 -- MS32006(低压5V多通道电机驱动器)

产品简述 MS32006 是一款多通道电机驱动芯片, 其中包含两路步进电机驱动, 一路直流电机驱动; 每个通道的电流最高电流1.0A; 支持两相四线与四相五线步进电机。芯片采用 I2C 的通信接口控制模式, 兼容 3.3V/5V 的标准工业接口。 MS32006 总共集成了两路步进电机驱动器与一…

【c++入门】引用,内联函数,auto

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本节我们来到c中一个重要的部分&#xff1a;引用 目录 1.引用的基本概念与用法1.1引用特性1.2使用场景1.3传值、传引用效率比较1.4引用做返回值1.5引用和指针的对…

公司调研 | 空间机械臂GITAI | 日企迁美

最近做的一些公司 / 产品调研没有从技术角度出发&#xff0c;而更关注宏观发展&#xff1a;主营方向、产品介绍、商业化落地情况、融资历程、公司愿景、创始人背景等。部分调研放在知乎上&#xff0c;大部分在飞书私人链接上 最近较关注人形Robot的发展情况&#xff0c;欢迎感兴…

【Java】Map和Set

文章目录 一、Map和Set的概念二、模型三、Map的说明3.1 Map.Entry<K, V>的说明3.2 Map 的常用方法 四、Set的说明4.1 Set的常用方法 一、Map和Set的概念 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关&#xff0c…

在线播放视频网站源码系统 带完整的安装代码包以及搭建教程

在线播放视频网站源码系统的开发&#xff0c;源于对当前视频市场的深入洞察和用户需求的精准把握。随着视频内容的爆炸式增长&#xff0c;用户对视频播放的需求也日益多样化。他们希望能够随时随地观看自己感兴趣的视频内容&#xff0c;同时还希望能够在观看过程中享受到流畅、…

用vscode调试cpp程序相关操作记录

需要在服务器上用vscode调试cpp程序&#xff0c;写此记录launch.json配置和相关步骤错误导致的问题 1.在需要运行程序的服务器上安装C/C Extension Pack&#xff08;之前只在本地装了&#xff09;&#xff0c;可以支持调试C/C应用程序(设置断点&#xff0c;单步执行&#xff0c…

分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测

分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测 目录 分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现PSO-KELM粒子群优化算法优化核极限学习机分类预测(完整源…

ubuntu20.04安裝輸入法

文章目录 前言一、操作過程1、安装fcitx-googlepinyin2、配置language support 前言 參考文獻 一、操作過程 1、安装fcitx-googlepinyin sudo apt-get install fcitx-googlepinyin2、配置language support 第一次點擊進去&#xff0c;會讓你安裝 點擊ctrl和空格切換中英文…

简历指导与模板获取

简历是应聘过程当中最重要的材料&#xff0c;是我们在求职市场的一张名片&#xff0c;一份好的简历能够吸引招聘者的注意&#xff0c;使你在竞争激烈的求职市场中脱颖而出。 1.简历指导 以下是一份典型简历的主要部分和常见内容&#xff1a; 联系信息&#xff1a; 包括你的全…

【火猫DOTA2】Secret官宣下放四号位Ekki,教练ah fu顶替担任

1、近日Secret战队官方宣布对阵容做出调整:下放四号位选手Ekki,教练ah fu将在未来一段时间重回赛场担任四号位。 Ekki于今年1月初宣布加入Secret担任四号位,但队伍在今年的表现不甚理想,未能从西欧预选赛晋级BB别墅杯和ESL One伯明翰。在唯一成功晋级的梦幻联赛S22上,Secret也仅…

如何在linux环境上部署单机ES(以8.12.2版本为例)

ES安装&#xff08;以8.12.2版本为例&#xff09; 首先创建好对应的文件夹然后在对应的文件夹下执行依次这些命令 1.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-linux-x86_64.tar.gz 2.wget https://artifacts.elastic.co/downloads/…

HCIA-Datacom H12-811 更新

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 在WLAN发展历史中&#xff0c;初级移动办公时代的主要无线协议标准不包括以下哪项&#xff1f; A. 802.11ac B. 802.11g C. 802.11b D. 802.11a 答案&#xff1a;A OSPF协议在进行主从关系选举…

mapstruct学习笔记-pojo之间的转换

1、前言 mapstruct中常用注解如Mapping,AfterMapping,BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。 2、简介 Reference Guide – MapStruct 3…

记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题

1.说明 如果是vue svg显示&#xff0c;请查阅其他标准资料&#xff0c;类似使用svg标签。我这里讲的另外一种情况&#xff0c;链接返回的是svg文件&#xff0c;需要用v-html显示图片。 2.activiti6流程图图片格式 ①png格式。可以查看链接返回&#xff0c;以png开头。 ②前端…

scDEA一键汇总12种单细胞差异分析方法 DESeq2、edgeR、MAST、monocle、scDD、Wilcoxon

问题来源 单细胞可以做差异分析&#xff0c;但是究竟选择哪种差异分析方法最靠谱呢&#xff1f; 解决办法 于是我去检索文献&#xff0c;是否有相关研究呢&#xff1f; https://academic.oup.com/bib/article/23/1/bbab402/6375516 文章指出&#xff0c;现有的差异分析方法…

Vmware虚拟机强制退出Ubuntu后无法开启,报错【开机时出错: VMware Player 无法连接到虚拟机。】

1. 现象 虚拟机强制退出Ubuntu后无法开机&#xff0c;报错如下&#xff1a; 2. 解决方法 任务管理器结束VMware相关的任务

JS加密解密之字符编码知识

在前端开发中&#xff0c;字符编码是一个至关重要的概念&#xff0c;特别是在数据传输、加密和解密等方面。JavaScript作为一种常用的脚本语言&#xff0c;在处理字符编码时也有其独特之处。本文将详细介绍JavaScript中的字符编码知识&#xff0c;包括字符编码的分类和相关案例…

SpringCloud从入门到精通速成(二)

文章目录 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&#xff09;运行两个UserApplication&…