How to replace jmeter keys when running Taurus - jmeter

Problem:
I am currently hard coding a password in my jmeter .jmx test file.
I want to be able to either set this in the config.yaml or on the command line using something like a "-o modules.jmeter.properties" switch (to replace this in the CI pipeline)
However I cant get either of these to actually replace the value in the .jmx file.
I have looked through the Taurus doco and ended up trying the following.
Updating the config.yaml file:
execution:
- executor: jmeter
scenario:
script: ../scripts/apigee_loadtesting.jmx
data-sources:
- ../datafiles/
concurrency: 2
ramp-up: 30s
hold-for: 1m
steps: 2
modules:
jmeter:
properties:
es.password: P#ssw0rd!
Also tried this from the commandline:
bzt ../config.yaml -o modules.jmeter.path=/usr/local/apache-jmeter-4.0.2/bin/jmeter \
-o modules.jmeter.properties.espassword=P#ssw0rd! config.yaml
But neither of them seem to do anything meaning, Any suggestions would be appreciated

Taurus itself will not change anything in the .jmx script, just make sure that you refer the property using __P() function as ${__P(es.password,)} in the .jmx script and the value will be substituted with the one from .jmx file or command-line override.
I would avoid using dots in properties names as it might cause problems with overriding properties values from the command-line. So stick to espassword everywhere if possible
The change your command line so config.yaml would be the last argument like:
bzt -o modules.jmeter.path=/usr/local/apache-jmeter-4.0.2/bin/jmeter -o modules.jmeter.properties.espassword=P#ssw0rd! config.yaml
See Navigating your First Steps Using Taurus article for more information on running JMeter tests using Taurus

Related

JMeter - Execute Multiple Scripts in Non-GUI mode

I have 6 scripts to be executed one after the other (Non-GUI mode).
Using Batch Files to achieve the same. Kindly find below the approach taken:
File with Parameters
File with Execution commands
Is there a better approach to implement this?
Thanks for your support.
Regards,
Ajith
I don't know if there is a "better" approach, there are "alternative" approaches i.e.
You can create one "umbrella" .jmx script and reference all your 6 scripts using Include Controllers
You can use Taurus tool as a wrapper for your JMeter tests, example Taurus YAML config file:
execution:
- scenario: test1
- scenario: test2
# etc.
scenarios:
test1:
script: test1.jmx
test2:
script: test2.jmx
#etc
modules:
local:
sequential: true

Jmeter - Trigger if condition via Command line value

Using JMeter I would like to execute a script where the script is entering into specific condition based on the property provided via windows CMD execution. My script looks like:
and execution is done via CMD as:
jmeter -n -t C:\Users\test\Documents\api.jmx -Jusers=1
How can I enter into just single specific If controller, based on the value provided on the runtime?
I think you should rather go for a single Switch Controller instead of 3 If Controllers and use __P() function to read the value from the command line:
${__P(scenario,)}
This way if you execute JMeter as:
jmeter -Jscenario=A -Jusers=1 -n -t C:\Users\test\Documents\api.jmx
it will run Sampler (or a Logic Controller) named A, similarly for B and C
You may also find Running JMeter Samplers with Defined Percentage Probability article useful.
Add check to users parameter for each If, in your case:
${__groovy(props.get("users")=="1")}
Checking this and using __jexl3 or __groovy function in Condition is advised for performances

How do I automatically save results of a table in a JMeter Listener at the end of the test

I have a Listener element that calculates some results from samples executed. I can manually save these results at the end of the test, but i would like to save them at the end of the test automatically to a file.
What do i need to do reacte to the End of test notification that seems to be sent by the JMeterEngine? Or is there a better solution do something at the end of the test?
In listeners there is a section named Filename just mention the path with the filename extension in which you want to save the result set, In this way J Meter will automatically saves the results that you want to store at the end of the test execution.
Consider using JMeterPluginsCMD Command Line Tool
Install JMeter Plugins Manager
Install JMeterPluginsCMD Command Line Tool
Install Synthesis Report
Run your JMeter test in command-line non-GUI mode like
jmeter -n -t test.jmx -l result.jtl
Generate textual representation of the Aggregate Report table like:
JMeterPluginsCMD.bat --generate-csv my-table.csv --input-jtl result.jtl --plugin-type AggregateReport
That's it, now you can open my-table.csv and enjoy your test results
You can generate other reports and charts similarly, check out How to Use the JMeterPluginsCMD Command Line article for more details.

JMeter - Running preprocessor when called from command line?

I'm very new to JMeter.
My team has existing JMeter Test Plans that we generally run through the GUI. I am experimenting with running it from the command line.
In our test plans, we have a bunch of variables declared at the TestPlan level. These variables contain information for setting up different environments (eg test, prod, dev). Directly under the TestPlan is a JSR223 PreProcessor that basically takes the variable that shows what environment you're trying to run in and sets up the hostname, port, etc to the values for that environment.
When I run the test using the GUI, it works perfectly under the selected environment. However, when I run it with the command line using the following command:
jmeter -n -t testName.jmx -l Results.csv
it tries to run under the defaulted environment and doesn't change it to the environment I want. I tried adding a -Jenv=dev, but that didn't seem to make any difference.
Do preprocessors not run when called from the command line? Could there be something else that I'm missing? Given my inexperience here, I'm not even really sure how I can tell what the problem is.
Thanks so much!
It is very difficult to conclude what is the exact problem in your jmeter script. Looking into the problem statement I can sense that you need to find correct way of passing a variable from command line and processing it in a script.
Example of passing a variable from command line and handling it in jmeter is shown below:
Declare a variable with value as a property in jmeter. You can use anything here, I have used User Defined variable. Variable env is declared as ${__P(env)}
Using JSR to process that variable. Here just printing the value passed from parameter into jmeter log. Now the value can be reused using ${env} variable [note it is a variable and not a property, because we declared that way in User Defined variable].
String valuePassed = vars.get("env");
log.info("Parameter passed from command line: " + valuePassed);
Run from the Command Line using following command:
jmeter -n -t <>.jmx -Jenv=Prod -j sample.log
Result shown in log file
PreProcessors are executed only in conjunction with Samplers
If you don't have any Sampler in your Thread Group - none of PreProcessors will be executed.
Also be aware that PreProcessors obey JMeter Scoping Rules to wit:
if you have a PreProcessor added as a child of the Sampler - the PreProcessor will be executed before the given Sampler
if you have 2 Samplers and a PreProcessor at the same level - the PreProcessor will be executed before each Sampler

how to collect jmeter runtime measurements and create a graph

I'm looking for a way to run a jmeter from command line,
collect the data from Summary Report to some file (say every x seconds) during the execution.
Then load the saved file to the jmeter to see the limeline graphs of the collected metrics.
How can I do such thing?
The simplest way automate getting a graph from results is to use a shell script coupled with the 'JMeterPluginsCMD' plugin that allows you to create a graph image from the command line.
Something like:
#!/bin/bash
cd /where/jmeter/is/installed
# Run Test
./jmeter.sh -n -t /path/to/mytest.jmx -l /directory/to/store/results.jtl
# Generate PNG File using plugin
java -jar CMDRunner.jar --tool Reporter --generate-png test.png --input-jtl /directory/to/store/results.jtl --plugin-type ResponseTimesOverTime --width 800 --height 600
To litterally read data from the Summary Report would take a lot more work but I imagine you could do something with awk, however I suspect that this method is not explicitly required and that reading the jtl file (after the test has completed) would work.
Since this is already answered question I'll offer an alternative to .png image and that is .html page. Please take a look at this answer :
https://stackoverflow.com/a/11191109/169277

Resources