利用 docker 实现JMeter分布式压测(二)

寻找基础镜像

寻找基础镜像花了老半天时间,首先,如果是 Linux 镜像,可以是 ubuntu/centos/alpine 等。太麻烦了,还需要在 里面下载安装 JDK 配置 Java 环境变量。

直接使用 JDK 简单一些,相当于在一个 包含 Java 环境的 Linux 里面构建,oracle JDK、openjdk 二选一,当然为了不必要的麻烦,openjdk 更保险。

openJDK:https://hub.docker.com/_/openjdk

最后是 JDK 版本, JMeter 要求 Java 8以以上就行。

JMeter is compatible with Java 8 or higher. We highly advise you to install latest minor version of your major version for security and performance reasons.

我一开始用的 Java 11 ,构建的 镜像 800MB ,实在是有点大,后来换回 Java 8 也要 600MB +。

目录结构

  1. $ tree

  2. .

  3. ├── README.md

  4. ├── master

  5. │   ├── Dockerfile

  6. │   └── build.sh

  7. └── slave

  8.     ├── Dockerfile

  9.     └── build.sh

编写 Dockerfile

由于我们要制作的是JMeter分布式镜像,所以,需要两个 Dockerfile.

创建/master/Dockerfile 文件
  1. # openjdk 8

  2. FROM openjdk:8

  3. # 更新版本1

  4. MAINTAINER defnngj<defnngj@gmail.com>

  5. ARG JMETER_VERSION="5.5"

  6. ENV JMETER_HOME /opt/apache-jmeter-$JMETER_VERSION

  7. ENV JMETER_DOWNLOAD_URL  https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz

  8. ENV SSL_DISABLED true

  9. RUN mkdir -p /tmp/dependencies  \

  10.     && curl -L --silent $JMETER_DOWNLOAD_URL >  /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz  \

  11.     && mkdir -p /opt  \

  12.     && tar -xzf /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz -C /opt  \

  13.     && rm -rf /tmp/dependencies

  14. # TODO: plugins (later)

  15. # && unzip -oq "/tmp/dependencies/JMeterPlugins-*.zip" -d $JMETER_HOME

  16. # Set global PATH such that "jmeter" command is found

  17. ENV PATH $PATH:$JMETER_HOME/bin

  18. VOLUME ["/data"]

  19. WORKDIR  $JMETER_HOME

  20. RUN sed 's/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/g' ./bin/jmeter.properties > ./bin/jmeter_temp.properties

  21. RUN mv ./bin/jmeter_temp.properties ./bin/jmeter.properties

为啥不用 JMeter 5.6 ?

这里严重吐槽一下,5.6 编写的脚本在非 GUI 模式下运行无法停止。前两周刚因为这个问题加班到很晚,可把我坑惨了,已经有阴影了。虽然出了 5.6.2 修复版本,我选择暂时不用他。

上述脚本就是 下载 JMeter 5.5 版本,解压到相应目录,然后配置 JMETER_HOME环境变量。

创建/slave/Dockerfile 文件
  1. # openjdk 8

  2. FROM openjdk:8

  3. # 更新版本1

  4. MAINTAINER defnngj<defnngj@gmail.com>

  5. ARG JMETER_VERSION="5.5"

  6. ENV JMETER_HOME /opt/apache-jmeter-$JMETER_VERSION

  7. ENV JMETER_DOWNLOAD_URL  https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz

  8. ENV SSL_DISABLED true

  9. RUN mkdir -p /tmp/dependencies  \

  10.     && curl -L --silent $JMETER_DOWNLOAD_URL >  /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz  \

  11.     && mkdir -p /opt  \

  12.     && tar -xzf /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz -C /opt  \

  13.     && rm -rf /tmp/dependencies

  14. # TODO: plugins (later)

  15. # && unzip -oq "/tmp/dependencies/JMeterPlugins-*.zip" -d $JMETER_HOME

  16. # Set global PATH such that "jmeter" command is found

  17. ENV PATH $PATH:$JMETER_HOME/bin

  18. VOLUME ["/data"]

  19. WORKDIR $JMETER_HOME

  20. EXPOSE 1099 60001

  21. ENTRYPOINT jmeter-server -Dserver.rmi.localport=60001 -Dserver_port=1099 \

  22.             -Jserver.rmi.ssl.disable=$SSL_DISABLED

需要注意:

  • 1099 相当于容器暴露的端口。我们通过访问 宿主机的 1099,即可访问到容器。

编写构建脚本

其实,有 Dockerfile 文件就可以用 docker build 进行构建了。为了简化操作,我们可以进一步创建 build.sh 来实现构建脚本。

创建/master/build.sh 文件
  1. JMETER_VERSION=${JMETER_VERSION:-"5.5"}

  2. # Example build line

  3. docker build  --build-arg JMETER_VERSION=${JMETER_VERSION} -t "defnngj/jmeter-master:${JMETER_VERSION}" .

--build-arg 设置构建时变量

-t 设置镜像名 + TAG。

  • 构建 master 镜像

  1. $ bash ./build.sh

  2. [+] Building 340.5s (9/9) FINISHED                                                                                                                           

  3. ...

  4.  => => naming to docker.io/defnngj/jmeter-master:5.5

创建/slave/build.sh 文件
  1. JMETER_VERSION=${JMETER_VERSION:-"5.5"}

  2. # Example build line

  3. docker build  --build-arg JMETER_VERSION=${JMETER_VERSION} -t "defnngj/jmeter-slave:${JMETER_VERSION}" .

--build-arg 设置构建时变量

-t 设置镜像名 + TAG。

  • 构建 slave 镜像

  1. $ bash ./build.sh

  2. [+] Building 1.4s (7/7) FINISHED                                                                                                                               

  3. ...

  4.  => => naming to docker.io/defnngj/jmeter-slave:5.5 

查看镜像
  1. $ docker images

  2. REPOSITORY              TAG    IMAGE ID       CREATED          SIZE

  3. defnngj/jmeter-slave    5.5    9e5c9141fcc4   19 minutes ago   672MB

  4. defnngj/jmeter-master   5.5    c4a2eab57be7   19 minutes ago   673MB

最后

我已将项目开源(包含文档):

https://github.com/defnngj/docker-jmeter

参考项目:

https://github.com/justb4/docker-jmeter

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行docker jmeter分布式压测时,如果出现错误,可以按以下步骤进行排查和解决: 1. 首先,检查各台slaver机器是否按照要求安装了相同版本的jdk和jmeter,并且在相同的目录下安装。确保各机器的环境配置一致。 2. 确认/etc/hosts的IP和hostname的映射是否正确配置,确保各机器之间可以相互通信。 3. 修改各机器的jmeter的默认内存参数,根据实际需求调整为合适的大小。这可以提高性能并减少出现异常的可能性。 4. 如果在压测过程中出现异常或错误,可以查看服务端的日志,检查是否有异常或错误信息。根据提示信息定位问题,可以根据服务端的业务架构逐层排查,直到找到发生问题的服务。 5. 对于出现的异常或错误信息,可以自行分析解决。例如,"Response code: 500"通常表示服务端出现问题。可以通过查看服务端的日志,根据提示信息来定位分析问题。对于不熟悉的错误信息,建议使用Google进行搜索,可能会找到一些可行的解决方案。 总结: 在使用docker jmeter进行分布式压测时,如果出现错误,首先要确保各机器的环境配置一致,然后检查配置文件和日志等相关信息,逐步排查问题并尝试解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本](https://download.csdn.net/download/qq_45629145/88248761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Jmeter压测思路+实操+报告分析](https://blog.csdn.net/qq_34671951/article/details/96477884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值