With the script build.sh the Docker image can be build from the Dockerfile
Build arguments (see build.sh) with default values if not passed to build:
5.6. Use as env variable to build with another version: export JMETER_VERSION=5.6"Asia/Jakarta". Use as env variable to build with another timezone: export IMAGE_TIMEZONE="Europe/Berlin"The Docker image will accept the same parameters as jmeter itself, assuming
you run JMeter non-GUI with -n.
There is a shorthand run.sh command. See test.sh for an example of how to call run.sh.
This is a standard facility of JMeter: settings in a JMX test script may be defined symbolically and substituted at runtime via the commandline. These are called JMeter User Defined Variables or UDVs.
See test.sh and the trivial test plan for an example of UDVs passed to the Docker image via run.sh.
See also: https://www.novatec-gmbh.de/en/blog/how-to-pass-command-line-properties-to-a-jmeter-testplan/
By default, JMeter reads out the available memory from the host machine and uses a fixed value of 80% of it as a maximum. If this causes Issues, there is the option to use environment variables to adjust the JVM memory Parameters:
JVM_XMN to adjust maximum nursery size
JVM_XMS to adjust initial heap size
JVM_XMX to adjust maximum heap size
All three use values in Megabyte range.
To run the container with custom JMeter plugins installed you need to mount a volume /plugins with the .jar files. For example:
sudo docker run --name ${NAME} -i -v ${LOCAL_PLUGINS_FOLDER}:/plugins -v ${LOCAL_JMX_WORK_DIR}:${CONTAINER_JMX_WORK_DIR} -w ${PWD} ${IMAGE} $@
The ${LOCAL_PLUGINS_FOLDER} must have only .jar files. Folders and another file extensions will not be considered.
It is also possible to define an alternate location to the custom JMeter plugins folder. Simply define a environment variable called JMETER_CUSTOM_PLUGINS_FOLDER with the desired folder path like in the example bellow:
sudo docker run --name ${NAME} -i -e JMETER_CUSTOM_PLUGINS_FOLDER=/jmeter/plugins -v ${LOCAL_PLUGINS_FOLDER}:/jmeter/plugins -v ${LOCAL_JMX_WORK_DIR}:${CONTAINER_JMX_WORK_DIR} -w ${PWD} ${IMAGE} $@
In a Terminal/Command session, install Git, navigate/make a folder, then:
git clone ssh://[email protected]:5656/tools/jmeter.git
cd docker-jmeter
Run the Build script to download dependencies, including the docker CLI:
Linux :
./build.sh
Windows :
./build.ps1
If you view this file, the docker build command within the script is for a specific version of JMeter and implements the Dockerfile in the same folder.
If you view the Dockerfile, notice the JMETER_VERSION specified is the same as the one in the build.sh script. The FROM keyword specifies the Alpine operating system, which is very small (less of an attack surface). Also, no JMeter plug-ins are used.
At the bottom of the Dockerfile is the entrypoint.sh file. If you view it, that's where JVM memory settings are specified for jmeter before it is invoked. PROTIP: Such settings need to be adjusted for tests of more complexity.
The last line in the response should be:
Successfully tagged fosterg4/jmeter:5.6
Run the test script:
./test.sh
If you view the script, note it invokes the run.sh script file stored at the repo's root. View that file to see that it specifies docker image commands.
File and folder names specified in the test.sh script is reflected in the last line in the response for its run:
==== HTML Test Report ====
See HTML test report in tests/trivial/report/index.html
Alternative exec by Makefile:
Like the bash script, it is possible to run the tests through a Makefile simply with the make command or by sending parameters as follows:
TARGET_HOST="www.tests.com" \
TARGET_PORT="80" \
THREADS=10 \
TEST=trivial \
make
Switch to your machine's Folder program and navigate to the folder containing files which replaces files cloned in from GitHub:
cd tests/trivial
The files are:
Navigate into the report folder and open the index.html file to pop up a browser window displaying the run report. On a Mac Terminal:
cd report
open index.html
Content type
Image
Digest
sha256:a80c05b91…
Size
295.9 MB
Last updated
over 2 years ago
docker pull fosterg4/jmeter