Jmeter和Docker

我看到一些人们在谈论JMeter和Docker的博文。 我明白,Docker将有助于build立一个具有所有依赖的容器。 但是他们都在相同的主机上运行/创build容器。 所以理想情况下,所有的容器将共享主机资源。 这就像你在同一个主机上运行多个Jmeter实例。 产生更多的负载不会有帮助。

当一个主机有12GB RAM时,我认为1个10GB的JMeter实例可以产生比在每个容器中运行1个Jmeter实例的10个容器更多的负载。

在这里运行docker有什么意义?

我做了一个自动的解决scheme ,可以很容易地与jenkins整合。

dockerfile应该从java8扩展并添加JMeter构build。 这个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 

如果你想使用主从解决scheme,这是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 

我从一个朋友的post中了解到,我们不应该在同一个主机上运行多个docker容器来产生更多的负载。

http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker/

相反,docker的用法是快速设置jmeter环境。