Fork me on GitHub

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镜像。其中做了以下事

  1. 定义了Jmeter的版本:JMETER_VERSION=5.4
    ⚠️注意,在修改Jmeter版本时,先自己手动确认一下自己需要的版本在链接https://archive.apache.org/dist/jmeter/binaries/中存在。
  2. 安装自己指定的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

https://www.cnblogs.com/T-CYP/p/14657204.html

 

 

 

  

  

  

 

  

 

  

 




  

  

 

posted @ 2024-01-17 18:21  橘子偏爱橙子  阅读(287)  评论(0编辑  收藏  举报