How can I access JMeter variables inside a custom java sampler? - jmeter

I have a java sampler that extends AbstractJavaSamplerClient. I would like to access the thread group loop counter value {__counter} from inside the java sampler. How can I achieve this?
ctx.getParameter("{__counter}"); doesn't seem to work where ctx is JavaSamplerContext
Thanks in advance.

__counter is a buildin function and not a parameter.
I would suggest to use it in one of the Pre-Processors such as User Parameters and store the returned value to parameter counterValue.
Then you can get the value in your java sampler with
ctx.getParameter("counterValue");

I believe that ctx.getVariables().get("{__counter}"); is what you're looking for.
See JavaDoc on JMeterContext (ctx is a shorthand for JMeterContext).
There is also some useful information on using JMeter API for different purposes in How to use BeanShell: JMeter's favorite built-in component guide.

Related

How to put value of User Defined Variable into Bean shell Sampler Variable - Jmeter

I try to move a User Defined variable to variable in beanshell sampler.
(I need the User defined variable to be part of a bigger string.)
When I try to move it, or make a copy of it I get error 500
can someone please advise how can I put the value of user defined field in bean-shell variable and than use it (not need to change the user defined variable just want it value)
In this script I Want to put the value of $Expected_Offer_ID to String variable Expected_Offer
There are (at least) 2 options:
Put ${Expected_Offer_ID} to "Parameter" section of the Sampler. You will be able to access it as Parameters in your script
Use vars.get("Expected_Offer_ID); where required. vars is a shorthand to JMeterVariables class instance, it provides read/write access to all JMeter Variables
Remember 2 things:
Never refer JMeter Variables and/or Functions in the Script body like ${myVar}, either use aforementioned "Parameters" section or code-based equivalents as they might resolve into something which can cause script interpretation failure or unexpected behaviour. Moreover, in case of Groovy language it prevents compiled scripts caching
Don't use Beanshell for scripting. Since JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language as Groovy is more Java-compliant and performs much better. See Apache Groovy - Why and How You Should Use It article for more detailed explanation, benchmarks and some tips on Groovy JDK enhancements usage.
JMeter variables are accessed through vars object, use:
String Expected_Offer = vars.get("Expected_Offer");

how to change the value of a variable in Jmeter

I am trying to use the variables captured in the Debug Sampler in Jmeter and then convert those variables into some other value. And then use it somewhere in the script.
I have added a BeanShell Sampler along with the Debug Sampler and tried to get the variables displayed in the Debug Sampler.
Below is the piece of code I have written in Jmeter.
Jmeter
Is my approach correct? Am completely new to Jmeter and have little Java knowledge. So please help me here and let me know how can I convert or use a variable through a Custom code in Jmeter.
It is almost correct, you have a couple of syntax errors (missing closing bracket and undefined SomeCharacter)
Also it is better to use JSR223 Elements and Groovy language rather than Beanshell, as Groovy performance is much better and it is more Java-compliant, see Groovy Is the New Black article for detailed explanation.
Final code should look something like:
def myVariable = vars.get("Corr_ContextN")
if (myVariable.equals("002056653")) {
vars.put("myvariable1", "SomeCharacter")
}
Keep in mind that you are not changing original Corr_ContextN, you are creating new variable myvariable1. Also in order to see new variable you need to move the Debug Sampler after the Beanshell Sampler
Your got the concept but your code has the following errors:
imports are wrong and useless. You only need to import Classes for unbound variables, ie the ones that are advertised in the component.
There's a missing ')' in the if clause
SomeCharacter is not defined
And you should avoid Beanshell and favor JSR223 Test Element with Groovy as per those recommandations:
http://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/
Note that there is also a __groovy function for your use case.

User defined function in JMeter

I'm new to JMeter. I want to create a user defined function and have to do verification in it. I don't know how to do it. Can anyone help me for this..?
Thank you in advance
Along with other answers, you can also come up with our own function to make it appear in JMeter as shown below.
Check here for step by step tutorial for the implementation.
I think you need to go for scripting-based Assertion, i.e.
Beanshell Assertion
JSR223 Assertion
Both allow executing arbitrary code and conditionally set associated sampler success or failure. See How to Use JMeter Assertions in Three Easy Steps article for more information on using assertions for setting pass/fail criteria on JMeter samplers.
You can use JSR223 Sampler to write the custom code in Java/Groovy/Javascript etc (chose from Language dropdown).
Pre and Post processors, Assertions also available for JSR223.

How to share the Integer type of value in jMeter

I wrote a Script in Test Case inside BeanShell PreProcessor and I want to use the value(Integer) in ThreadGroup.
By using vars.put() we can only share String type of values.
NOTE: I want to use the value in Number of Threads(users) block
There are at least 3 ways of doing this:
Use vars.putObject() - places an arbitrary Object into JMeterVariables
Cast Integer to String vars.put("foo", String.valueOf(bar));
Use bsh.shared namespace like:
bsh.shared.myInt = 15
See How to Use BeanShell: JMeter's Favorite Built-in Component guide for more information on Beanshell scripting in JMeter tests
NOTE! you won't be able to amend number of threads in the current Thead Group using Beanshell test elements.

how can i pass dynamic values to url in jmeter

I have to give dynamic values to url which takes number of users and their age , which can be selected though web page. but I want to give it in Jmeter using BeanShell PostProcessor.
Help me in this,since I'm new to Jmeter.
This is the path:
/destinations/packages?airports%5B%5D=LGW&units%5B%5D=000577%3ADESTINATION&when=29-05-2016&until=&flexibility=true&flexibleDays=3&noOfAdults=2&noOfSeniors=0&noOfChildren=1&childrenAge=3&duration=7114&first=0&searchType=search&searchRequestType=ins&sp=true&multiSelect=true
from what I've got looks like you can use CSV Data Set Config.
Create .txt file with the data you want to feed your test with;
Place the above .txt file to the folder where your .jmx file lies;
In your Test plan: Under your request sampler - place CSV Data set Config;
Then if you need to use your dynamic values within one threadgroup => refer these data as ${quanity}, ${age} in you url.
If you need to pass these values across the threadgroups => add BeanShell Assertion
Then (in the other Tread group) refer those as ${__property(_quantity)},${__property(_age)}.
Hope, it helps.
First of all you need Beanshell PreProcessor, not Beanshell PostProcessor.
All this parameters are basically name/value pairs which can be defined via HTTPSamplerBase class. HTTPSamplerBase class instance is available to Beanshell PreProcessor as sampler pre-defined variable so if you add the following code into the Beanshell PreProcessor "Script" area
sampler.addEncodedArgument("airports[]","LGW");
sampler.addEncodedArgument("units[]","000577:DESTINATION");
sampler.addEncodedArgument("when","29-05-2016");
sampler.addEncodedArgument("until","");
sampler.addEncodedArgument("flexibility", "true");
sampler.addEncodedArgument("flexibleDays","3");
sampler.addEncodedArgument("noOfAdults","2");
//etc
Your HTTP request will be populated with the values, you set via Beanshell.
JMeter Variables can be accessed via vars shorthand which stands for JMeterVariables class instance.
String airport = vars.get("airport");
sampler.addEncodedArgument("airports[]", airport);
//etc
See How to Use BeanShell: JMeter's Favorite Built-in Component article for comprehensive information on how to use Beanshell Test Elements in Jmeter.
Remember that it is recommended to avoid scripting where possible so if there is another way of implementing your task - go for it.

Resources