Docker构建jmeter分布式压测实战
一、Jmeter基于docker分布式压测的测试环境搭建
1、在本机按照自己的习惯找一个目录存放新建的Dockerfile文件
mkdir Jm_Docker cd Jm_Docker touch Dockerfile
2、在Dockerfile文件中写入如下内容:
FROM openjdk:8-jre-slim
MAINTAINER TesterHome
ARG JMETER_VERSION=5.4
# 使用清华大学的镜像源
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 安装所需工具
RUN apt-get update && \
apt-get install -y --no-install-recommends \
apt-utils \
wget \
telnet \
iputils-ping \
unzip
# 创建目录
RUN mkdir -p /opt/data/tmp1/SCS/jmeter_fbs/jmeter
# 安装 JMeter
RUN cd /opt/data/tmp1/SCS/jmeter_fbs/jmeter/ \
&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz \
&& tar -xvzf apache-jmeter-$JMETER_VERSION.tgz -C /opt/data/tmp1/SCS/jmeter_fbs/jmeter \
&& rm apache-jmeter-$JMETER_VERSION.tgz
# 设置环境变量
ENV JMETER_HOME /opt/data/tmp1/SCS/jmeter_fbs/jmeter/apache-jmeter-$JMETER_VERSION/
ENV PATH="$JMETER_HOME/bin:${PATH}"
主要做的事情是做一个基础的jmeter镜像。其中做了以下事
- 定义了Jmeter的版本:JMETER_VERSION=5.4
⚠️注意,在修改Jmeter版本时,先自己手动确认一下自己需要的版本在链接https://archive.apache.org/dist/jmeter/binaries/中存在。 - 安装自己指定的Jmeter,并配置好Jmeter的环境变量
3、在Dockerfile文件所在目录下执行以下命令。
【.】表示当前目录下即Dockerfile文件所在的目录;test1是对应镜像的标签;jm是镜像的REPOSITORY,都可以自己定义
Jm_Docker# docker build -t jm:test1 .
在命令行执行docker images查看所有镜像,就可以看到自己构建的jmbase镜像

4、配置slave镜像文件,需要将之前创建的Dockerfile重命名,重新创建Dockerfile
新的Dockerfile内容如下:
# Use jmbase image
# 使用jm基本映像
FROM jm:test1
MAINTAINER TesterHome
# Ports to be exposed from the container for JMeter Slaves/Server
# 从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 \
-Jserver.rmi.ssl.disable=true
-
命令行中输入
docker build -t slaves:server . -
再次修改Dockerfile文件内容如下:做Jmeter分布式中的master
# Use jmbase image FROM jm:test1 MAINTAINER Testerhome # Ports to be exposed from the container for JMeter Master EXPOSE 60000 -Jserver.rmi.ssl.disable=true
- 命令行执行
docker build -t master:server . - 命令行执行docker imagers就会看到如图所示已经建好的images
- 运行以下命令启动master和slaves
docker run -it -d --name jmmaster master:server docker run -it -d --name jmslave01 slaves:server docker run -it -d --name jmslave02 slaves:server
docker ps可以看到已经运行起来的容器

- 输入以下命令找到对应的slaves的ip地址,并记录下来

备注:执行过程遇到提示java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
说明Dockerfile文件中没有开启server.rmi.ssl.disable 在构建Dockerfile文件时配置即可,slaves必须先配置好,再构建容器,不然容器无法启动
5、jmeter分布式测试执行
把测试脚本放到jmmaster容器中
docker cp ./testplan.jmx jmmaster:/opt/data/tmp1/SCS/jmeter_fbs/jmeter
进入jmmaster容器
docker exec -it jmmaster /bin/bash
进入容器指定目录
cd /opt/data/tmp1/SCS/jmeter_fbs/jmeter/
执行分布式压测(-R 接的是slave容器 ip,有多个容器配置多个ip即可)
jmeter -n -t /opt/data/tmp1/SCS/jmeter_fbs/jmeter/testplan.jmx -l /opt/data/tmp1/SCS/jmeter_fbs/jmeter/testplan.jtl -R 172.17.0.5,172.17.0.4
容器内部jtl生成report报告:
jmeter -g ./testplan.jtl -o ./report
将jtl或者report复制到linux环境目录下:
docker cp jmmaster:/opt/data/tmp1/SCS/jmeter_fbs/jmeter/testplan.jtl ./ docker cp jmmaster:/opt/data/tmp1/SCS/jmeter_fbs/jmeter/report ./
report报告展示:

备注:linux环境对应的端口1099 50000 60000 需要对外开放
参考地址:
https://www.jianshu.com/p/ba7ae4e5de89