I have on counter in jmeter with reference name ${__threadNum}_user_counter,
I want to get the value of this counter in a beanShell Sampler:
the code of my beanshell Sampler is:
String threadNumber=(${__threadNum}).toString();
String count=threadNumber+"_user_counter";
vars.put("current_counter_value", ${count});
I want to get the value of the counter and set it in a jmeter variable,the problem is that "count" variable is not remplaced by its value setted in the script.
Thank you for help.
Related
I am making dme2 call to api from beanshell and i am getting response from it like {"stagedcustomerId":"165ce369-a9fb-4d42-b8f0-f119a6ae20eb"}
so now i want to pass only customer id value to another beanshell sampler for next api call as one of parameter in request body in same thread in jmeter.
Please suggest what can we do in this case. is there any way to do beanshell postprocessor?
You can use SampleResult shorthand in order to define the Beanshell Sampler response data like:
SampleResult.setResponseData("{\"stagedcustomerId\":\"165ce369-a9fb-4d42-b8f0-f119a6ae20eb\"}","UTF-8")
Once done you can add a JSON Extractor as a child of the Beanshell Sampler and configure it like:
That's it, now you will be able to access the extracted value as String id = vars.get("id"); in other Beanshell Sampler or as ${id} in any other test element.
Also be aware that starting from JMeter 3.1 it's highly recommended to use JSR223 Test Elements and Groovy language for scripting so consider refactoring your test on next available opportunity.
I have condition where I need to load properties file and assign prop value to JMeter UDV.
I have been able to load property file successful, however I can not assign prop value to UDV
I have try the following:
Load prop file contain key value (i.e var_from_prop_file=1000)
Create UDV (with keyname "my.var" and value "${var_from_prop_file}")
Run debug script with debug sampler, I can see var_from_prop_file assigned to value 1000
However my.var still empty (no value).
my expectation when creating UDV with my.var = ${var_from_prop_file}, my.var value will be 1000 too, but it doesn't happen here.
I have try with __eval and __evalVar - no luck so far.
Is it possible to reference jmeter variable to properties file key?
and call variable in other place?
So far from debug sampler - looks like jmeter load UDV first and then jmeter properties not the way around.
All your tries are getting variables , you need to get property using different functions:
Properties are not the same as variables. Variables are local to a thread; properties are common to all threads, and need to be referenced using the __P or __property function.
In your case set my.var with the following value
${__P(var_from_prop_file)}
Or
${__property(var_from_prop_file)}
Similar result, just notice that __P have default value 1
The default value for the property. If omitted, the default is set to "1".
Another option is using JSR223 Sampler using vars to set variable and props to get property:
vars.put("my.var", props.get("var_from_prop_file"));
The fastest way to bulk convert JMeter Properties into JMeter Variables is using JSR223 Sampler and the following code:
SampleResult.setIgnore()
props.entrySet().each {entry ->
vars.putObject(entry.getKey(),entry.getValue())
}
Where:
SampleResult.setIgnore() - removes JSR223 Sampler from listeners and .jtl results file
props - shorthand for JMeter Properties (basically an instance of java.util.Properties)
vars - shorthand for the instance of JMeterVariables class
I have a question about a very basic script that I wrote,
I just want to get data from DB, put it in a variable using beanshell sampler.
and in the end of the thread group to create another bean shell and check the value of this variable.
the problem is at saving the data to a variable (var name is before), when I use the props.put command but the value still null.
Can someone please advise?
If you want to store a value into JMeter Variables you should amend your code like:
vars.put("before", String.valueOf("budgetInt"))
System.out.println("Before is " + vars.get("before"));
Once done you should be able to access the defined variable as ${before} or ${__V(before)} where required.
If you amend your property setting like:
props.put("Before", String.valueOf(budgetInt))
You should be also able to access the value as ${__P(Before,)}
Also consider switching to JSR223 Sampler and Groovy language.
var before isn't assign and therefore it's null.
You should get value as:
var before = props.get("Before");
I'm finding the way to use the variable sampler in JSR223 Sampler, JSR223 PreProcessor, JSR223 PostProcessor, and all other JSR223 script.
There are some other variables like vars, props, prev, SampleResult. I can use them easily.
For example:
vars: vars.get("VARIABLE_NAME"), vars.put("VARIABLE_NAME","VALUE"), ...
props: props.get, props.put, ...
prev: prev.getTime(), prev.isSuccessful(), prev.getLatency(), ...
SampleResult: SampleResult.getResponseCode(), SampleResult.getResponseMessage(), ...
But I don't know how to use variable sampler. Only thing I can do with this variable is:
sampler.sample(): It helps to returns the Name of current Sampler
So, could anyome please let me know there is any other way to use this variable?
Thanks in advance!
For JSR223 Sampler sampler variable stands for JSR223Sampler, see the JavaDoc for all available methods and fields.
When it comes to JSR223 Pre or Post Processor - in that case sampler variable stands for parent sampler class instance, for instance in case of HTTP Request it will be HTTPSamplerProxy, for JDBC Request - it will be JDBCSampler and so on.
You can check exact class using Groovy expression like:
log.info(sampler.getClass().getName())
You can check How to Use BeanShell: JMeter's Favorite Built-in Component guide for more information on pre-defined variables and their usage. It is applicable for Groovy as well.
sampler is a Sampler object. you can use whatever the methods available here, not only methods declared in Sampler class but also the methods in super classes/interfaces like TestElement.
For example:
sampler.sample() - returns sampler's name
sampler.setProperty() - set a property by specifying key, value
sampler.setThreadName() - set thread name for the sampler.
I'm running a Thread Group with the following property values:
Number of threads: 200
Ramp-up Time (sec): 20
Loop-count: 2
I also have user defined variables set for the HTTP Requests. However, when the second iteration is reached, I need the user defined variable's value to also change.
Add a Beanshell PreProcessor as a child of first request
Put the following code into PreProcessor's "Script" area:
if (vars.getIteration() == 2) {
vars.put("myVar", "newValue");
}
Replace myVar with your variable name and newValue with variable value for the second loop.
vars is a shorthand for JMeterVariables class instance and getIteration() method returns current loop's number.
If you want to dive deaper into Beanshell in particular and extending JMeter test via scripting in general I would recommend to get familiarized with How to use BeanShell: JMeter's favorite built-in component guide.