how to declare global function in jmeter and use anywhere in beanshell - jmeter

I'm facing with problem don't know how to create one Java function and call it to use anywhere because I don't want to write this function many times. Could anyone give me the best solution to do it?

If you still want to proceed with Beanshell (however since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language) - take a look at Beanshell configuration, there are properties like:
beanshell.init.file
beanshell.sampler.init
etc.
where you can place the "common" code which can be reused in the Beanshell test elements.
For Groovy as of JMeter 5.2.1 there are no equivalent properties, however you should be able to compile your Groovy code into a .jar file, put the file into JMeter Classpath and invoke the functions defined in the .jar from any JSR223 Test element. Check out How to Reuse Your JMeter Code with JAR Files and Save Time article for more details.
This approach can be applied to Beanshell as well if you still want to use it and find the properties not very convenient.

Related

Jmeter project documentation

We have been using the Jmeter for the API's functional and performance test activities.
Is there a possibility to generate the documentation (similar java docs, API docs) for the JMX projects that we have been developing?
Each JMeter's Test Element has "Comments" section which can be used for explanation of what this element is for:
It's possible to create a JMeter Test Plan using Java language and JMeter API, see JMeter Command Line Overview: 5 Ways To Launch a Test for more details. There is also jmeter-from-code sample project you can use as a reference, normal JavaDoc will be available out of the box
There is JMeter DSL project which provides easy and handy way of creating a JMeter test plan, however it doesn't fully support all the features. For basic test plans it should be faster and easier than point 2
There is Taurus tool which provides possibility to create JMeter scripts in a declarative manner using YAML and YAML naturally supports comments

Exported jar file is not visible in JUnit request sampler

i try to select class file in jmeter junit request sampler.i want help how to choose my class file in junit request sampler
i export the package and stored it in apache lib->junit folder
then,restart the jmeter, but my class file is not visible in junit request sampler and i import all the selenium jar files into the project including selenium standalone jar.
#Test
public void performence()
{
WebDriver driver=new HtmlUnitDriver();
driver.get("https://www.spicejet.com/");
System.out.println( driver.getTitle());
}
}
please help me to resolve this
I think your main issue is probably you didn't put dependencies (Webdriver) of your JUnit classes in lib folder.
Check jmeter.log to see what the error is and clarify your question.
Try checking Search for JUnit 4 annotations (instead of JUnit3) box (it is not checked by default hence JMeter is looking for JUnit3-style annotations)
Make sure your class has an empty constructor or constructor with a single String parameter. Other class types are not supported as of JMeter 5.0
Make sure to place the .jar with your test into lib/junit folder of your JMeter installation and other libraries (i.e. Selenium java client) to lib folder of your JMeter installation. Carefully select dependency libraries versions in order to avoid so called JAR Hell as JMeter and Selenium might rely on different versions of the same library.
JMeter restart will be required to pick up any changes
Check jmeter.log file for any suspicious entries. In the absolute majority of cases JMeter will print the information regarding the error or failure there.
See How to Use JUnit With JMeter article for more information on JUnit and JMeter integration.
If you don't have large number of JUnit-based tests which you want to import into JMeter and you're starting development from scratch it might be easier to go for WebDriver Sampler plugin which provides JMeter with smooth Selenium support and possibility to write Selenium-related code in variety of languages including Java.
You can install WebDriver Sampler plugin using JMeter Plugins Manager

Spring load testing

I've implemented a testing unit using spring (mock mvc), and I'm looking for a tool to run this unit in many threads/processes (so it will act as load testing for my server). I've seen applications like the grinder and jmeter but I don't want to re-write the entire unit, but just to use the existing one. Any ideas?
JMeter is able to execute existing JUnit tests via JUnit Request sampler, all you need to do is to drop jar(s) with your test along with dependencies somewhere in JMeter classpath and restart JMeter. Once done you'll be able to see your classes and methods in JUnit Request sampler dropdown and execute them in multithreaded manner.
See How to Use JUnit With JMeter guide for more detailed instructions and explanations.

how use tests written in Selenium and Cucumber-JVM with JMeter?

I have set of functional tests written in Selenium and Cucumber-JVM, I use maven to run them by Cucumber tags.
Now I need to use some of those tests with JMeter to check performance. How can I do it?
I believe that you can just
Compile your tests into .jar file(s)
Copy the .jar file(s) into JMeter classpath
tests files - under /lib/junit folder of your JMeter installation
dependency files - under /lib folder
Add JUnit Request Sampler and choose required test from "Classname" and "Test Method" dropdowns
Configure JMeter as per your load scenario and run the test
See How to Use JUnit With JMeter guide for details on working with JUnit tests from JMeter perspective.
You can use JMeter sampler called BSF Sampler. This one allows to execute java class from JMeter. Please choose beanshell in the scripting language field.

JSR223 Post Processor: ClassNotFoundException: org.apache.bsf.engines.java.JavaEngine

I'm trying to use a JSR223 post processor in jmeter 2.11 with some java code and I keep getting this error:
org.apache.bsf.BSFManager:Exception:java.lang.ClassNotFoundException:org.apache.bsf.engines.java.JavaEngine
I've checked the bsf/bsh jar files, not sure what else I need to do to make this work. I've read that groovy is recommended but I'd really like this to work with java.
As per the very first lines from BSF Sampler documentation:
See the Apache Bean Scripting Framework website for details of the languages supported. You may need to download the appropriate jars for the language; they should be put in the JMeter lib directory.
And at the same place:
The BSF API has been largely superseded by JSR-223, which is included in Java 1.6 onwards. Most scripting languages now include support for JSR-223; please use the JSR223 Sampler instead. The BSF Sampler should only be needed for supporting legacy languages/test scripts.
So I would recommend considering the following (in the order from worst to best performance provided)
Beanshell Sampler (if your Java code is doing something "light")
JSR223 Sampler + groovy language - for "heavy" operations (again you'll need to have groovy jar in your JMeter CLASSPATH)
Write your own implementation of Java Request Sampler
Both Beanshell and Groovy support Java syntax with some limitations which can be easily worked around.
See Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! guide which might help you to make right selection.

Resources