├── .gitignore ├── README.md ├── docker-compose.yml ├── jmeter-base ├── Dockerfile ├── LICENSE └── README.md ├── jmeter-master ├── Dockerfile ├── README.md ├── Vagrantfile ├── bootstrap.sh ├── jmeter.properties └── scripts │ ├── HTTP Request.jmx │ └── test_google.jmx └── jmeter-node ├── Dockerfile ├── README.md ├── Vagrantfile ├── bootstrap.sh └── jmeter.properties /.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .pyproject 3 | .vagrant 4 | */logs/* -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jmeter 2 | JMeter Docker image, Vagrant build, with Terraform AWS build scripts 3 | 4 | Images included: 5 | - __jmeter-base__ base image with Java and JMeter installed 6 | - __jmeter-master__ image with JMeter configured to run as a Server 7 | - __jmeter-node__ image with JMeter configure to run as a Client 8 | 9 | Build: 10 | ```shell 11 | docker-compose up 12 | docker-compose rm 13 | ``` -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | # https://docs.docker.com/compose/compose-file/ 4 | # http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker/ 5 | # srivaths.blogspot.com/2014/08/distrubuted-jmeter-testing-using-docker.html 6 | # http://jmeter.apache.org/usermanual/get-started.html#options 7 | 8 | services: 9 | jmeter-node01: 10 | container_name: jmeter-node01 11 | image: apolloclark/jmeter-node 12 | ports: 13 | - 1099 14 | - 50000 15 | volumes: 16 | - /input_data 17 | - /logs 18 | jmeter-node02: 19 | container_name: jmeter-node02 20 | image: apolloclark/jmeter-node 21 | ports: 22 | - 1099 23 | - 50000 24 | volumes: 25 | - /input_data 26 | - /logs 27 | jmeter-node03: 28 | container_name: jmeter-node03 29 | image: apolloclark/jmeter-node 30 | ports: 31 | - 1099 32 | - 50000 33 | volumes: 34 | - /input_data 35 | - /logs 36 | jmeter-master: 37 | container_name: jmeter-master 38 | image: apolloclark/jmeter-master 39 | ports: 40 | - 60000 41 | volumes: 42 | - ./jmeter-master/scripts:/scripts 43 | - ./jmeter-master/logs:/logs 44 | entrypoint: 45 | - /var/lib/apache-jmeter/bin/jmeter 46 | - -n 47 | - -t 48 | - /scripts/test_google.jmx 49 | - -l 50 | - /logs/results.csv 51 | - -j 52 | - /logs/jmeter.log 53 | - -LDEBUG 54 | # - -R 172.18.0.2,172.18.0.3,172.18.0.4 55 | -------------------------------------------------------------------------------- /jmeter-base/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | MAINTAINER Apollo Clark apolloclark@gmail.com 3 | 4 | # Describe the environment 5 | ENV DEBIAN_FRONTEND "noninteractive" 6 | ENV JDK_VERSION 1.7.0 7 | ENV JMETER_VERSION 3.1 8 | ENV JMETER_PLUGINS_MANAGER 0.11 9 | 10 | # Install the JDK 11 | RUN apt-get update -y && apt-get install curl openjdk-7-jdk -y && \ 12 | cd /var/lib && \ 13 | curl -s http://www-us.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz -o /var/lib/jmeter-$JMETER_VERSION.tgz && \ 14 | tar xf jmeter-$JMETER_VERSION.tgz && \ 15 | rm -f jmeter-$JMETER_VERSION.tgz && \ 16 | ln -s /var/lib/apache-jmeter-$JMETER_VERSION /var/lib/apache-jmeter && \ 17 | curl -s https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.0/cmdrunner-2.0.jar --output /var/lib/apache-jmeter/lib/cmdrunner-2.0.jar && \ 18 | curl -s https://repo1.maven.org/maven2/kg/apc/jmeter-plugins-manager/$JMETER_PLUGINS_MANAGER/jmeter-plugins-manager-$JMETER_PLUGINS_MANAGER.jar --output /var/lib/apache-jmeter/lib/ext/jmeter-plugins-manager.jar && \ 19 | java -cp /var/lib/apache-jmeter/lib/ext/jmeter-plugins-manager.jar org.jmeterplugins.repository.PluginManagerCMDInstaller && \ 20 | sh /var/lib/apache-jmeter/bin/PluginsManagerCMD.sh status && \ 21 | sh /var/lib/apache-jmeter/bin/PluginsManagerCMD.sh install jpgc-casutg 22 | 23 | ENTRYPOINT /bin/sh -------------------------------------------------------------------------------- /jmeter-base/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /jmeter-base/README.md: -------------------------------------------------------------------------------- 1 | # jmeter-base 2 | 3 | Base image for use with the jmeter-server and jmeter-client images. 4 | 5 | Build: 6 | ```shell 7 | docker build -t apolloclark/jmeter-base . 8 | ``` -------------------------------------------------------------------------------- /jmeter-master/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Dockerfile for a jmeter master. 3 | # A container from this image will be ready to run a jmeter client. 4 | # 5 | # Usage: 6 | # docker run -d \ 7 | # -v :/logs \ 8 | # -v :/input-data \ 9 | # -v :/scripts \ 10 | # -n \ 11 | # -t /scripts/