项目作者: egaillardon

项目描述 :
Docker image for Apache JMeter with JMeter plugins - https://jmeter.apache.org & https://jmeter-plugins.org
高级语言: Dockerfile
项目地址: git://github.com/egaillardon/jmeter-plugins.git
创建时间: 2018-04-18T19:33:51Z
项目社区:https://github.com/egaillardon/jmeter-plugins

开源协议:The Unlicense

下载


Docker image for Apache JMeter and JMeter plugins

Apache JMeter Logo
JMeter PLugins Logo

Docker Stars
Docker Pulls
Docker Automated build
Docker Build Status

Github Stars
Github Forks

Follow
Tweet

  • The version number is composed of two version numbers
    • the first is the version of the Apache JMeter embedded in this docker image
    • the second is for this docker image itself

Apache JMeter including all plugins available with the JMeter Plugins Manager

  • egaillardon/jmeter-plugins

For a Docker image containing only Apache JMeter, see https://hub.docker.com/r/egaillardon/jmeter/

  • Apache JMeter 5.2 (see changelog below)
    • No more new 5.2.0 update (01/26/2020)
    • 5.2.0-1.0.0 (Dockerfile)

Quick reference

How to use this image

Working directory

The working directory defined in the Dockerfile is /jmeter.

Default User

The default user is jmeter.

Environment variables

Variable Description Default value
GC_ALGO Java runtime options to specify JVM garbage collection algorithm "-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
VERBOSE_GC Java runtime options to generate GC verbose file "-verbose:gc -Xloggc:gc_jmeter_%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps"
HEAP Java runtime options for memory management used when JMeter is started "-Xms1g -Xmx1g -X:MaxMetaspaceSize=256m"
JMETER_LANGUAGE Java runtime options to specify used language "-Duser.language=en -Duser.region=EN"
JMETER_OPTS Java runtime options used when JMeter is started ""
JVM_ARGS Optional java args, e.g. -Dprop=val ""
JMETER_GROUP_ID Set the jmeter user’s group id inside the container 1000
JMETER_USER_ID Set the jmeter user’s id inside the container 1000

Running clients and servers

Running standalone clients

Runner an interactive dockerized client in non-GUI mode

docker run --interactive --tty --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins --nongui --testfile test.jmx --logfile result.jtl

Runner a detached dockerized client in non-GUI mode

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins --nongui --testfile test.jmx --logfile result.jtl

Running servers

Running a server on 192.168.1.1 with default RMI port (1099) and SSL for RMI disabled

docker run --detach --publish 1099:1099 --rm egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.1.1 -Jserver.rmi.localport=1099 --server

Running a server on 192.168.1.1 with specified RMI port (1098) and SSL for RMI disabled

docker run --detach --publish 1098:1098 --rm egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.1.1 -Jserver.rmi.localport=1098 -Dserver_port=1098 --server

Running clients in distributed tesing mode

Running a client in non-GUI mode with SSL for RMI disabled, connecting to a remote server on 192.168.1.1 with default RMI port (1099)
  • with docker

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true --nongui --testfile test.jmx --remotestart 192.168.1.1 --logfile result.jtl

  • without docker

jmeter -Jserver.rmi.ssl.disable=true --nongui --testfile ../test.jmx --remotestart 192.168.1.1 --logfile result.jtl

Running a dockerized client in non-GUI mode with SSL for RMI disabled, connecting to a remote server on 192.168.1.1 with specfied RMI port (1098)
  • with docker

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true --nongui --testfile test.jmx --remotestart 192.168.1.1:1098 --logfile result.jtl

  • without docker

jmeter -Jserver.rmi.ssl.disable=true --nongui --testfile ../test.jmx --remotestart 192.168.1.1:1098 --logfile result.jtl

Running a dockerized client in non-GUI mode with SSL for RMI disabled, connecting to the two remote servers on 192.168.1.1
  • with docker

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true --nongui --testfile test.jmx --remotestart 192.168.1.1:1098,192.168.1.1:1099 --logfile result.jtl

  • without docker

jmeter -Jserver.rmi.ssl.disable=true --nongui --testfile ../test.jmx --remotestart 192.168.1.1:1098,192.168.1.1:1099 --logfile result.jtl

An example that generates a report at the end of the run

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true --nongui --testfile test.jmx --remotestart 192.168.1.1:1098,192.168.1.1:1099 --logfile result.jtl --forceDeleteResultFile --reportatendofloadtests --reportoutputfolder report -Jjmeter.reportgenerator.overall_granularity=10000

Full list of command-line options

Command

docker run --interactive --tty --rm egaillardon/jmeter-plugins

Result

  1. --?
  2. print command line options and exit
  3. -h, --help
  4. print usage information and exit
  5. -v, --version
  6. print the version information and exit
  7. -p, --propfile <argument>
  8. the jmeter property file to use
  9. -q, --addprop <argument>
  10. additional JMeter property file(s)
  11. -t, --testfile <argument>
  12. the jmeter test(.jmx) file to run. "-t LAST" will load last
  13. used file
  14. -l, --logfile <argument>
  15. the file to log samples to
  16. -i, --jmeterlogconf <argument>
  17. jmeter logging configuration file (log4j2.xml)
  18. -j, --jmeterlogfile <argument>
  19. jmeter run log file (jmeter.log)
  20. -n, --nongui
  21. run JMeter in nongui mode
  22. -s, --server
  23. run the JMeter server
  24. -E, --proxyScheme <argument>
  25. Set a proxy scheme to use for the proxy server
  26. -H, --proxyHost <argument>
  27. Set a proxy server for JMeter to use
  28. -P, --proxyPort <argument>
  29. Set proxy server port for JMeter to use
  30. -N, --nonProxyHosts <argument>
  31. Set nonproxy host list (e.g. *.apache.org|localhost)
  32. -u, --username <argument>
  33. Set username for proxy server that JMeter is to use
  34. -a, --password <argument>
  35. Set password for proxy server that JMeter is to use
  36. -J, --jmeterproperty <argument>=<value>
  37. Define additional JMeter properties
  38. -G, --globalproperty <argument>=<value>
  39. Define Global properties (sent to servers)
  40. e.g. -Gport=123
  41. or -Gglobal.properties
  42. -D, --systemproperty <argument>=<value>
  43. Define additional system properties
  44. -S, --systemPropertyFile <argument>
  45. additional system property file(s)
  46. -f, --forceDeleteResultFile
  47. force delete existing results files and web report folder if
  48. present before starting the test
  49. -L, --loglevel <argument>=<value>
  50. [category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com
  51. .example.foo=WARN
  52. -r, --runremote
  53. Start remote servers (as defined in remote_hosts)
  54. -R, --remotestart <argument>
  55. Start these remote servers (overrides remote_hosts)
  56. -d, --homedir <argument>
  57. the jmeter home directory to use
  58. -X, --remoteexit
  59. Exit the remote servers at end of test (non-GUI)
  60. -g, --reportonly <argument>
  61. generate report dashboard only, from a test results file
  62. -e, --reportatendofloadtests
  63. generate report dashboard after load test
  64. -o, --reportoutputfolder <argument>
  65. output folder for report dashboard

Tips and tricks

Stopping a server after the end of the test

Set the JMeter property server.exitaftertest to true.

docker run --detach --publish 1099:1099 --rm egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.1.15 -Jserver.rmi.localport=1099 -Jserver.exitaftertest=true --server

Stopping a test before the end

Replace relaxed_kilby by your client container id or name.

docker exec -it relaxed_kilby shutdonwn.sh
or
docker exec -it relaxed_kilby stoptest.sh

Setting a fixed RMI port on the client side

Set the JMeter property client.rmi.localport (useful when there is a firewall between the client and servers).

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true -Jclient.rmi.localport=2500 --nongui --testfile test.jmx --remotestart 192.168.1.15:1098,192.168.1.15:1099 --logfile result.jtl

Sending the content of the jmeter log file to console

Set the jmeterlogconf option in order to use another log4j2.xml file (see the example file provided)

docker run --detach --publish 1099:1099 --volume `pwd`:/jmeter --rm egaillardon/jmeter-plugins -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.1.15 -Jserver.rmi.localport=1099 -Dserver_port=1099 --server --jmeterlogconf log4j2.xml

Running a client in GUI mode, with SSL for RMI disabled, to connect to remote servers

jmeter -Jremote_hosts=192.168.1.1 -Jserver.rmi.ssl.disable=true

SSL for RMI

In distributed testing, SSL for RMI has to be enabled or disabled on both sides.
See Apache JMeter Remote Testing for more information.

Getting the IP address

  • On Linux

hostname -I
/sbin/ifconfig eth0 | grep 'inet '| awk '{ print $2}'

  • On macOS

ipconfig getifaddr en0
/sbin/ifconfig en0 | grep 'inet '| awk '{ print $2}'

Setting your timezone in the docker container

  • Add the TZ environment variable

docker run --detach --publish 1099:1099 --env TZ=Europe/Paris --rm egaillardon/jmeter-plugins

Assigning the local user’s id and group to the jmeter user inside the container

docker run --env JMETER_GROUP_ID=/usr/bin/id -g--env JMETER_USER_ID=/usr/bin/id -u--rm egaillardon/jmeter --server -Jserver.rmi.ssl.disable=true

Running JMeter in GUI mode from Docker using X11-forwarding (Pull request #2 submitted by @ericpeters)

Install Quartz
  • Install the latest XQuartz X11 server (https://www.xquartz.org/) and run it
  • Activate the option ‘Allow connections from network clients’ in XQuartz settings
  • Quit & restart XQuartz (to activate the setting)
Run Interactive UI
  1. # allow access from localhost
  2. xhost + 127.0.0.1
  3. docker pull egaillardon/jmeter-plugins
  4. docker run -e DISPLAY=host.docker.internal:0 --interactive --tty --rm egaillardon/jmeter-plugins jmeter.sh

Changelog

  • Apache JMeter 5.2
    • 5.2.0-1.0.0 :
      • Change docker base image version to egaillardon/jmeter:5.2.0-1.0.0