当前位置: 首页 > news >正文

用 docker 创建 jmeter 容器, 实现性能测试

我们都知道,jmeter 可以做接口测试,也可以用于性能测试,现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具,可以创建一个容器,然后把项目放到容器中,就可以构建出一个独立的运行环境

所以,有人就想,能否把他们俩弄到一块来使用?

今天,我就来给大家讲讲如何结合起来使用。

首先,选择一个 Linux 机器,安装 docker

如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以加裙485187702,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

用 docker 创建 jmeter 容器(普通 jmeter)

从 nmb-jmeter-docker: 使用 docker 运行 jmeter 进行测试上下载代码,到 Linux 机器的/opt 路径下

进入 base-jmeter-docker 文件夹

执行 sh build.sh, 构建本地 jmeter 镜像

默认版本是 jmeter5.1.1

待构建成功之后,把用 jmeter 创建的 jmx 脚本文件,上传到 Linux 机器的 base-jmeter-docker 路径下,执行

sh jmeter.sh -n -t YouJMX_file \-l JTL_date +%Y%m%d_%H%M%S.jtl \-j jmeter.log \-e -o Report_date +%Y%m%d_%H%M%S

也可以把你的 jmx 文件上传到其他路径,在运行 jmeter.sh 命令时,指定 jmx 文件路径

这个命令和 jmeter 的 CLI 模式命令是一样的,cli 的相关参数也是可以使用。

创建增强型 jmeter 容器(jmeter 带插件)

  1. 下载【jpgc-jmeter-docker】文件夹中所有文件

  2. 构建本地镜像:sh build.sh

  3. 使用构建的镜像,运行 jmx 文件

    sh jmeter.sh -n -t YouJMX_file \

    -l YouJTL_date +%Y%m%d_%H%M%S.jtl \

    -j jmeter.log \

    -e -o report_date +%Y%m%d_%H%M%S

默认 jmeter 版本为 5.1.1

如果想要更改为其他版本,依次修改:Dockerfile、build.sh、jmeter.sh 文件中的版本号 5.1.1

注意: 请不要指定为低于 5 的版本,低于 5,生产的 HTML 报告可能有问题

在这个版本,改造了 HTML 报告和引入了 jpgc 插件,如果你还想要引入其他插件,可以自己打包压缩到 JmeterPlugins-jpgc.zip 文件包中。然后,执行 sh build.sh 构建新的镜像,

创建分布式 jmeter 容器(slave)

做性能测试,一般都会遇到 jmeter 不能产生足够数量的并发用户数,需要使用分布式来创建足够数量的并发用户数,但是,现实中,我们可能又不能获得足够数量的电脑。

使用 docker 创建 jmeter 的助攻服务,这样就能实现,理论上一台电脑上创建出任意多个 jmeter 助攻服务,产生出足够量的并发用户数。另外,在助攻机的维护上,也变的更加简单,因为所有的助攻机容器都是基于相同的镜像创建,理论上,所有容器都是一样。

  1. 下载【slave-jmeter-docker】文件夹中所有文件

  2. 构建本地 slave 镜像:sh build.sh

  3. 创建 slave 容器

    docker run -itd --name slave1 nmb/jmeter-slave:5.1.1 server

    重复执行时,修改容器名称name值,则可创建多个slave容器

默认 jmeter 版本为 5.1.1

如果想要更改为其他版本,依次修改:Dockerfile、build.sh 文件中的版本号 5.1.1

注意:

1、该镜像中,加入 jpgc 插件,更改了 HTML 报告模板

2、请不要指定为低于 5 的版本,低于 5,生产的 HTML 报告可能有问题

3、助攻服务端口 1099, 5000, 因为后面 master 用 link 连接容器,所以,可以不用映射端口

想要创建多个 slave 容器,只需要修改创建容器命令中的指定的容器名称。

每个助攻服务的端口都是 1099 和 5000,如果直接映射到宿主机上,肯定会出现端口冲突的情况,所以,我们用 master 连接 link 每个 slave 容器,就不用担心端口冲突问题了。

创建分布式 jmeter 容器(master)

  1. 下载【master-jmeter-docker】文件夹中所有文件
  2. 构建本地 master 镜像:sh build.sh
  3. 修改 run-master.sh 文件中 --link 的数量和名称

冒号前面为 slave 容器名称,冒号后面为自定义别名

  1. 使用 master 容器执行分布式脚本

    sh run-master.sh -n \

    -R 助攻机别名(多个时用逗号分隔) \

    -t YouJMXfile \

    -l YouJTL_date +%Y%m%d_%H%M%S.jtl \

    -j jmeter.log \

    -e -o report_date +%Y%m%d_%H%M%S

默认 jmeter 版本为 5.1.1

如果想要更改为其他版本,依次修改:Dockerfile、build.sh 文件中的版本号 5.1.1

注意: 请不要指定为低于 5 的版本,低于 5,生产的 HTML 报告可能有问题

注意:

  • 该镜像构建成功后,会带有 jpgc 插件,可以执行使用 jpgc 插件编写的脚本
  • 该镜像还对 jmeter 生产的 HTML 报告进行了改造,生产的报告将转换为中文
  • jmeter 分布式,主控和助攻机的 jmeter 必须一致,所以,master 和 slave 的 jmeter 版本务必一致

好了使用 docker 来创建 jmeter 进行性能测试的技术,已经讲完了,代码已经开源到 gitee, 如果你觉得有用,请帮忙点个 star 噢!

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

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

相关文章:

  • 4.1 Bloom算法
  • 目标检测与图像识别分类的区别?
  • 图的深度优先遍历的六种应用附Java代码
  • 一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)
  • (SpringBoot)第二章:Spring创建和使用
  • 矢量图形编辑软件illustrator 2023 mac中文软件特点
  • 微信开放平台账号
  • 0037【Edabit ★☆☆☆☆☆】【修改Bug 2】Buggy Code (Part 2)
  • redis6.0源码分析:简单动态字符串sds
  • 贝叶斯神经网络用于学习曲线的概率预测【ICLR 2017】
  • 【C++指针】类的指针
  • Android 处理多个TextView, 文案过长时前面文本省略的问题
  • 4.8 内部类
  • Vue之样式绑定
  • pg数据库插入数据的时候,进行数据去重
  • #Java异常处理
  • Django 博客开发教程 8 - 博客文章详情页
  • ECMAScript入门(七)--Module语法
  • JS数组方法汇总
  • October CMS - 快速入门 9 Images And Galleries
  • PaddlePaddle-GitHub的正确打开姿势
  • 看域名解析域名安全对SEO的影响
  • 力扣(LeetCode)22
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 设计模式 开闭原则
  • 时间复杂度与空间复杂度分析
  • 手写一个CommonJS打包工具(一)
  • 推荐一个React的管理后台框架
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (07)Hive——窗口函数详解
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (十)T检验-第一部分
  • (十三)Flask之特殊装饰器详解
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .gitignore
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 依赖注入和配置系统
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET6 命令行启动及发布单个Exe文件
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net的C#语言取月份数值对应的MonthName值
  • .net连接MySQL的方法
  • .NET轻量级ORM组件Dapper葵花宝典
  • @JSONField或@JsonProperty注解使用
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @synthesize和@dynamic分别有什么作用?
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [BUG]Datax写入数据到psql报不能序列化特殊字符