用Docker 实现 Jmeter 分布式运行

最近因项目需要,须对部分接口进行性能测试,但是jmeter单机并发数无法满足要求,于是在网上查阅、整理的部分资料,现将过程进行总结。

准备工作:

  1. Linux系统需要安装好docker环境。
  2. Jmeter官网下载 apache-jmeter-5.2.1.tgz 压缩包
  3. 准备2份 jmeter.properties ,否则每次启动容器都要修改

构建镜像

  1. 创建jmetermaster镜像的Dockerfile
FROM openjdk:8-jre-slim
ARG JMETER_VERSION=5.2.1
RUN mkdir /jmeter
WORKDIR /jmeter
COPY apache-jmeter-5.2.1.tgz /jmeter
RUN tar -xzf apache-jmeter-$JMETER_VERSION.tgz
ENV JMETER_HOME=/jmeter/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}
WORKDIR /jmeter/apache-jmeter-$JMETER_VERSION/bin
EXPOSE 60000
  1. 构建master镜像
# 构建镜像
docker build -t jmetermaster .   # 注意结尾有 .
# 构建完成后查看是否在镜像列表中
docker images

为了后续使用方便,还可以将这个master镜像push到Dockerhub

# 遵循命名规范,可以修改一下镜像命名
docker tag jmetermaster  chenf24k/jmetermaster :1.0
# 推送镜像到Dockerhub
docker push chenf24k/jmetermaster:1.0
  1. 修改一份jmeter.properties文件中的配置
 server.rmi.ssl.disable=true
  1. 准备jmeterslave镜像的Dockerfile
FROM chenf24k/jmetermaster:1.0
WORKDIR /jmeter/apache-jmeter-5.2.1/bin
COPY jmeter.properties .
EXPOSE 1099 50000
ENTRYPOINT $JMETER_HOME/bin/jmeter-server \
-Dserver.rmi.localport=50000 \
-Dserver_port=1099
  1. 构建slave镜像, 顺便把执行机也推了
docker tag jmeterslave  chenf24k/jmeterslave:1.0
docker push chenf24k/jmeterslave:1.0

启动容器

  1. 启动jmetermaster
docker run -d --name jmetermaster chenf24k/jmetermaster
  1. 启动 jmeterslave
docker run -d --name slave1 chenf24k/jmeterslave
docker run -d --name slave2 chenf24k/jmeterslave
  1. 查看jmeter 主机和执行机的ip
 docker inspect --format '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $( docker ps -a -q)
  1. 修改另一份 jmeter.properties 放入 jmetermaster

将查到的ip写入 jmeter 的配置文件中

# 两个执行机的ip:port
remote_hosts=ip1:port,ip2.port
# 同时也需要开启以下配置
server.rmi.ssl.disable=true

将修改好的jmeter.properties 放到jmetermaster容器中

docker cp ./jmeter.properties jmetermaster:/jmeter/apache-jmeter-5.2.1/bin/
  1. 进入jmetermaster执行测试脚本即可
jmeter -n -t /jmeter/apache-jmeter-5.2.1/bin/test1.jmx -l /test.jtl -R 172.18.0.3,172.18.0.4  -e -o  /reports

本文章内容记录的是一次尝试有以下不足之处:
1.需要多次拷贝jmeter的配置文件
2.执行测试脚本还需要进入master容器中执行
3.以及报告输出的目录还可以设置共享目录,后续在琢磨了。
欢迎大家分享,交流一些好的想法和经验。

发布了18 篇原创文章 · 获赞 6 · 访问量 3189

猜你喜欢

转载自blog.csdn.net/asd0654123/article/details/104816261