基于Docker 实现分布式测试
使用Docker 部署Jmeter非常方便,可以省略软件的安装以及配置,比如jdk、jmeter。需要部署多个工作节点可以节省时间。
- 控制节点(Master-主节点)只有一个,可以使用图形化的界面,方便操作
- 工作节点(Slave-从节点)使用Docker部署Jmeter镜像,工作节点的数量越多越好。
- 控制节点使用RMI 调用工作节点
- 控制节点测试计划设置的线程数量约等于工作节点宿主机能同时工作的线程数,这样能真实模拟用户同时发起的请求,压测的结果也准确些
制作Jmeter基础镜像
- 下载jmeter安装包 https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz
- 编写 Dockerfile
FROM openjdk:8-jdk-alpine3.9
ARG JMETER_VERSION=5.6.3
# 设置工作目录
WORKDIR /opt/jmeter
# 复制 Jmeter
COPY apache-jmeter-${JMETER_VERSION}.tgz ./
# 安装
RUN tar -xvzf apache-jmeter-$JMETER_VERSION.tgz \
&& rm apache-jmeter-$JMETER_VERSION.tgz
# 设置环境变量
ENV JMETER_HOME /opt/jmeter/apache-jmeter-$JMETER_VERSION/
ENV PATH="$JMETER_HOME/bin:${
PATH}"
- 文件目录关系如下
root@ubuntu:/home/chengdu/jmeter/docker# tree
.
├── apache-jmeter-5.6.3.tgz
├── Dockerfile
└── worker
└── Dockerfile.worker
- 执行编译镜像命令
docker build -t jmeter:5.6.3 .
- 查看镜像是否编译成功
root@ubuntu:/home/chengdu/jmeter/docker# docker images|grep jmeter
jmeter 5.6.3 37a73dacbe58 4 hours ago 342MB
jmeter-5.6.3 worker 80ae9383e488 4 hours ago 342MB
制作工作节点镜像
基于第一步的基础镜像制作
FROM jmeter:5.6.3
# 默认使用1099端口,可以用参数覆盖
ARG RMI_PORT=1099
ARG LOCAL_PORT=50000
ENTRYPOINT $JMETER_HOME/bin/jmeter-server \
-Dserver_port=${RMI_PORT} \
-Dserver.rmi.localport=${LOCAL_PORT} \
-Djava.rmi.server.hostname=${HOST_IP} \
-Jserver.rmi.ssl.disable=true
保存为 Dockerfile.worker,运行编译镜像命令
docker build -f Dockerfile.worker -t jmeter-5.6.3:worker .
启动工作节点
启动3个工作节点,注意,HOST_IP 变量可以填写宿主机的IP,确保控制节点的网络能当前的宿主机
docker run -p 1099:1099 -p 50000:50000 -e RMI_PORT=1099 -e LOCAL_PORT=50000 -e HOST_IP=192.168.230.128 -it -d --name jmeter-worker-01 jmeter-5.6.3:worker
docker run -p 1100:1100 -p 50001:50001 -e RMI_PORT=1100 -e LOCAL_PORT=50001 -e HOST_IP=192.168.230.128