This document shows how you can use JMeter to perform more automated (non-interactive) testing.
This article assumes that you:
In your existing test plan, make sure that any variations in testing make use of functions or variables. For example, if running a HTTP sampler, use HTTP Request Defaults to specify a host as {{$\{+P(targetHost,localhost)\}}}. Other useful places for parameterisation might include number of threads, ramp-up period or scheduler duration in a thread group, using a format of {{$\{+P(threadgroup.threads,500)\}}} (The {{+P}} function is shorthand for {{+property}}. See the \[http://jmeter.apache.org/usermanual/functions.html#__P user manual\] for more info on using this function). |
jmeter -n -t load_test.jmx -l load_test_report.jtl -q mytest.properties -j mytest.log-Gprop=val or a properties file, such as -G./myglobal.properties+P() function - e.g. ${+P(propname)}Name: |
Value: |
HOST |
|
jmeter -n -t load_test.jmx -l load_test_report.jtl -Gmytest.properties -j mytest.log -R remotehost1,remotehost2 ${GLOBAL_VARS}
Note that load injection to targets will be a increased as a ratio of number of threads per thread group multiplied by number of client machines.
A bash script similar to the following could be used to start up jmeter (called jmeter_test_wrapper.sh for example):
#!/bin/sh
loadtest="myloadtest"
GLOBAL_VARS=""
REPORT_DIR=/tmp
JMETER_PROPERTIES=jmeter.properties
JMETER_CUSTOM_PROPERTIES=mytest.properties
# If set as an environment var, then use it, otherwise leave it unset.
HOST_LIST=${HOST_LIST:+"-R ${HOST_LIST}"}
# Had an issue with -Gglobal.properties file, so parsed this into individual properties.
for var in `grep -vE "^#|^$" ${JMETER_CUSTOM_PROPERTIES}`; do
GLOBAL_VARS="-G${var} ${GLOBAL_VARS}"
done
# But after testing, it does work as expected.
GLOBAL_VARS="-G${JMETER_CUSTOM_PROPERTIES}"
if [ -f ${loadtest}.jmx ]; then
echo "Running ${loadtest} with:"
echo -e " -----------------------
$JMETER -n
-t ${loadtest}.jmx
-l ${REPORT_DIR}/${loadtest}.jtl
-p ${JMETER_PROPERTIES}
${GLOBAL_VARS}
${HOST_LIST}
-j ${REPORT_DIR}/_${loadtest}.log
-----------------------"
$JMETER -n \
-t ${loadtest}.jmx \
-l ${REPORT_DIR}/${loadtest}.jtl \
-p ${JMETER_PROPERTIES} \
${GLOBAL_VARS} \
${HOST_LIST} \
-j ${REPORT_DIR}/_${loadtest}.log
else
echo "Could not find test plan for ${loadtest}"
fi
|
For a local test, you could run: ./jmeter_test_wrapper.sh
For a remote test, it can be modified as HOST_LIST="192.168.1.10,192.168.1.12" ./jmeter_test_wrapper.sh
Now all you need to do is make sure the servers are running and add the above command into scheduler.