[英]Jmeter and Docker
我看到一些博客文章,人们谈论JMeter和Docker。 我知道Docker将有助于设置一个包含所有依赖项的容器。 但它们都在同一主机中运行/创建容器。 理想情况下,所有容器都将共享主机资源。 就像在同一主机中运行多个jmeter实例一样。 生成更多负载没有帮助。
当主机有12GB RAM时,我认为1个具有10GB堆的JMeter实例可以比在每个容器中运行10个带有1个jmeter实例的容器产生更多的负载。
在这里运行码头工具有什么意义?
应该从java8
扩展java8
并添加JMeter构建。 这个Docker镜像我将调用jmeter-base:
FROM java:8
RUN mkdir /jmeter \
&& cd /jmeter/ \
&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.3.tgz \
&& tar -xvzf apache-jmeter-3.3.tgz \
&& rm apache-jmeter-3.3.tgz
ENV JMETER_HOME /jmeter/apache-jmeter-3.3/
# Add Jmeter to the Path
ENV PATH $JMETER_HOME/bin:$PATH
如果你想使用主从解决方案,这是jmeter主Dockerfile:
FROM jmeter-base
WORKDIR $JMETER_HOME
# Ports to be exposed from the container for JMeter Master
RUN mkdir scripts
EXPOSE 60000
这是jmeter奴隶Dockerfile:
FROM jmeter-base
# Ports to be exposed from the container for 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
现在,使用这两个图像,您应该执行一个脚本来执行您应该知道所有从属IP。 这个脚本完成所有工作:
#!/bin/bash
COUNT=${1-1}
docker build -t jmeter-base jmeter-base
docker-compose build && docker-compose up -d && docker-compose scale master=1 slave=$COUNT
SLAVE_IP=$(docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep slave | awk -F' ' '{print $2}' | tr '\n' ',' | sed 's/.$//')
WDIR=`docker exec -it master /bin/pwd | tr -d '\r'`
mkdir -p results
for filename in scripts/*.jmx; do
NAME=$(basename $filename)
NAME="${NAME%.*}"
eval "docker cp $filename master:$WDIR/scripts/"
eval "docker exec -it master /bin/bash -c 'mkdir $NAME && cd $NAME && ../bin/jmeter -n -t ../$filename -R$SLAVE_IP'"
eval "docker cp master:$WDIR/$NAME results/"
done
docker-compose stop && docker-compose rm -f
我从我的一位朋友的帖子中了解到,我们不应该在同一主机中运行多个docker容器来产生更多负载。
http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker/
相反,这里使用docker是为了快速设置jmeter环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.