Jmeter和Docker

Kit*_*son 6 jmeter docker

我看到一些博客文章,人们谈论JMeter和Docker。我知道Docker对于设置具有所有依赖项的容器将有所帮助。但是它们都在同一主机中运行/创建容器。因此,理想情况下,所有容器都将共享主机资源。就像您在同一主机上运行多个jmeter实例一样。产生更多的负载将无济于事。

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

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

Vic*_*tor 6

做了一个可以轻松与Jenkins集成的自动解决方案

dockerfile应该从java8JMeter构建扩展并添加。我将这个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
Run Code Online (Sandbox Code Playgroud)

如果要使用主从解决方案,则这是jmeter主Dockerfile:

FROM jmeter-base

WORKDIR $JMETER_HOME
# Ports to be exposed from the container for JMeter Master
RUN mkdir scripts

EXPOSE 60000
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

现在,使用这两个映像,您应该执行一个脚本来执行,您应该知道所有从属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
Run Code Online (Sandbox Code Playgroud)


Kit*_*son 3

我从一位朋友的这篇文章中了解到,我们不应该在同一主机中运行多个 docker 容器来生成更多负载。

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

相反,这里使用docker是为了快速搭建jmeter环境。