I'm working with a JMeter test script where I need to use some pre-defined values (such as client_id, client_secret, scope, etc.) different for each request, that change depending on the environment (dev, QA, staging, prod).
Currently, these values are hardcoded into the script, which means every time I switch environments, I have to manually update the script — which is error-prone and not scalable.
What I’m looking for: A clean, maintainable way to make my JMeter script environment-agnostic so I can run it in any environment just by changing a config file or parameter — without editing the .jmx script itself.
Example Use Case:
For dev, I might use:
client_id = dev-client-id
scope 1 = abc
scope 2 = def
...etc
For prod:
client_id = prod-client-id
scope 1 = xyz
scope 2 = vwx
like 50 of them
...etc
I can think of the following options:
Put these values into different .properties file like for dev
it will be dev.properties
, for QA
- qa.properties
, etc.
Once done you will be able to replace hardcoded values with __P() function calls. And when you will need to run a test against different environment you just feed the relevant .properties file to JMeter via -q
command-line argument like:
jmeter -q dev.properties -n -t test.jmx ....
More information: Apache JMeter Properties Customization Guide
Alternatively you can define properties with prefixes somewhere in User Defined Variables like dev_client_id
, qa_client_id
, etc. and then specify this "prefix" in another User Defined Variables