首页 > 其他分享 >利用 docker 实现JMeter分布式压测

利用 docker 实现JMeter分布式压测

时间:2023-11-23 14:56:50浏览次数:30  
标签:jmeter slave 压测 runcare 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

编写一个简单的脚本。

  • docker: 通过doker创建容器。
$ docker pull runcare/jmeter-master
$ docker pull runcare/jmeter-slave
  • 查看docker镜像
$ docker images

REPOSITORY              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 ps

CONTAINER 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
$ 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 文件,可以看到压测的结果。

最后

如果你想学习自动化测试,那么下面这套视频应该会帮到你很多
如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的话,学习自动化测试相关内容可以进群:785128166,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

标签:jmeter,slave,压测,runcare,docker,JMeter
From: https://www.cnblogs.com/hebendexiaomao/p/17851536.html

相关文章

  • 如何以docker的方式运行spug?
     1、概述spug是一个开源的运维管理平台。通过它可以管理本地的主机,上传文件,发布应用等操作。 下面的部分,介绍如何以docker的方式来运行spug. 2、部署 部署spug,需要以下2个前提:已经安装好docker已经使用dockerpull拉取了spug镜像,推送到本地的镜像仓库 拉取sp......
  • Ubuntu20.04安装Docker及汉化版管理面板Portainer
    一、安装Docker 1、由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:sudoapt-getremovedockerdocker-enginedocker-cedocker.io 2、更新apt包索引:sudoapt-getupdate 3、安装以下包以使apt可以通过HTTPS使用存储库(repository):sudoapt-getinst......
  • Docker知识(一)
    1.Docker是什么Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,ShipandRunAnyApp,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,是用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。Linux......
  • docker 中已经存在的容器修改自启动
    1.修改容器自启动dockerupdate--restart=always容器id2.关闭容器自动dockerupdate--restart=no容器id......
  • Docker部署SQLServer
    一、简介美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。二、搭建SQLServer绿联DX4600为例,首先我们打开Docker......
  • Docker Swarm动态扩容MINIO集群
    需求背景当一个minio集群的磁盘不够用的时候,可以有两种方式,第一个通过扩磁盘,第二种增加机器。但是不管是哪种方式,都不能去动原来集群的启动方式,那样集群就起不来了,会一直提示类似下面这种报错,ERRORUnabletoinitializebackend:/data1driveisalreadybeingusedinanother......
  • jmeter中断言失败后不继续执行后续的取样器,以及失败事务个数的统计
    需要实现的场景:N款产品自动投保,需要统计成功投保的有多少款,失败投保的有多少款?遇到的问题处理:问题一、某款产品投保时,若其中一个接口断言失败,如何让后续接口不继续执行?答:通过if控制器进行处理,  问题二:如何解决统计失败或成功执行的产品数?答:通过事务处理器+BeanShell......
  • docker部署jumpserver
    安装docker略版本$dockerversionClient:DockerEngine-CommunityVersion:24.0.7APIversion:1.43Goversion:go1.20.10Gitcommit:afdd53bBuilt:ThuOct2609:07:412023OS/Arch:linux/amd64C......
  • filerun docker方式安装(debian arm64, tinkerboard2s类似树莓派)
    启动mysqldockerrun-p3366:3306--namemysql57--privileged=true-eMYSQL_ROOT_PASSWORD=12345-v/mnt/docker/varlibmysql:/var/lib/mysql-dliupeng0518/mysql:5.7-arm64#redis命令dockerrun-itd--nameredis--privileged=true-p6380:6379redis--requir......
  • docker安装
     一、Dockerdesktop安装(1)首先要开启Hyper-V,开启操作参照https://blog.csdn.net/qq_44368508/article/details/126601570(2)DockerDesktop官方下载地址: https://docs.docker.com/desktop/install/windows-install/会很慢,直接找到其他下载地址,下载DockerDesktop4.24.1......