Writing scripts in Jmeter to simulate http requests without using GUI - performance

Is there a way to write scripts that simulate HTTP requests in JMeter. I know this can be done using the GUI, but is there a way to automate it using scripts?

The main method for writing JMeter scripts is using GUI.
Another option is to edit manually JMX file but (almost) nobody uses it as:
its format isn't documented (at least I haven't saw it)
JMeter GUI is really easy to use. See JMeter New GUI features to increase your productivity. It can't be said about JMX XML file
Non-GUI mode is for running JMeter scripts (it takes less resources than GUI mode)

Related

performance test script for an EPP application

Can we perform load tests on EPP applications? The application is a Windows batch file that interacts with the server. Which performance testing tool would be suitable for use? I need some help with this.
The key point is "interacts". If your goal is to simulate hunderds/thousands of Windows machines concurrencty running the batch file the easiest way would be replicating the network traffic generated by these .batch files so you could replay it at scale.
So you need to analyze the network protocol(s) which is(are) under the hood of the batch file used for communication with the server and check if the network footprint can be simulated using JMeter's built-in Samplers or JMeter Plugins, if the protocol communication can be replayed - you can just increase the number of threads (virtual users) in JMeter's Thread Group to simulate multiple simultaneous batches execution.
If batch file uses HTTP protocol for interacting with the server - you will be even able to record the traffic using JMeter's HTTP(S) Test Script Recorder, see How to Run Performance Tests of Desktop Applications Using JMeter article for more details.
It is also possible to kick off multiple batches instance using OS Process Sampler but in this case you won't get reasonable metrics and KPIs

Can jmeter cli tools record a test script?

I am new to jmeter. Creating a simple script seems easy via browser actions recording. Can that be done without launching the jmeter IDE?
As per latest stable JMeter version 5.4.1 it's not possible to start HTTP(S) Test Script Recorder without starting JMeter GUI
If you cannot do this for any reason the options are in:
Use JMeter Chrome Extension
Use your browser developer tools to record your test request into a .HAR file, once done you can:
either use online conversion tool to convert .har file into a JMeter script
or manually create JMeter's HTTP Request samplers by looking into requests details in the browser developer tools. If you cannot launch JMeter GUI at this stage as well you can consider using Taurus automation framework which allows creation of JMeter test plans using YAML syntax
You need to start the JMeter proxy for recording the test and it is not possible to start the proxy through available options.
There is a number of ways available for building test plans including the HTTP(S) Test Script Recorder.
Ten different ways to build JMeter Test Plans
The recording feature can be used even for complex scripts. You will have to use/add JMeter components and configure them once the recording is done to achieve the desired user actions.

Why it is recommended to run load test in non gui mode in jmeter

I'm monitoring the connect time and latency to connect from jmeter machine while running in GUI mode and that is in within acceptable limit.
Should we strictly follow non GUI mode even though I can able to perform load test with GUI mode?
I'm targeting 250 TPS and able to achieve that ..I have increased my memory and monitoring CPU and memory of load generator is below 60%.
Should I go for non GUI mode ?
The main limitation is that each event in the queue is being handled by a single event dispatch thread which will act as the bottleneck on your JMeter side.
My expectation is that your "250 TPS" look like:
while it should look like:
So check how does your load pattern look like using i.e. Transactions per Second listener (installable via JMeter Plugins Manager)
Also check how does your JVM look like especially when it comes to garbage collection, it can be done via i.e. JVisualVM, most probably you will see the same "chainsaw" pattern
You don't need to follow JMeter best practices, but
you may encounter issues to achieve specifc goals (as TPS)
your machine can't execute GUI or have low resources
you execute JMeter using a script or build tool as Jenkins
Also it's better to be familiar with JMeter CLI (non GUI) and its report capabilities
JMeter supports dashboard report generation to get graphs and statistics from a test plan.
Also it will be needed for using distributed testing
consider running multiple CLI JMeter instances on multiple machines using distributed mode (or not)
CLI also useful for Parameterising tests
The "loops" property can then be defined on the JMeter command-line:
jmeter … -Jloops=12

JMeter test script is getting struck while running the script in GUI and Non GUI mode

JMeter test script is getting struck while running the script in GUI and Non-GUI mode.
I have recorded the script in our QA env and executed the script in JMeter it is working fine all scenarios.
But when I recorded the script in other performance test environment(Load balancing server with VM's enabled ) but in this Environment, I am not able to execute all scenarios, here in the middle of the scenario it is getting struck.
Please help here, how to proceed further.
your "getting struck" doesn't tell anything to us, you need to supply more troubleshooting information like:
.jtl results file
JMeter log file
Thread dump which can be taken from JMeter GUI or using jstack
For the time being I can give only a generic piece of advice: by default JMeter's HTTP Request samplers don't have any connect/response timeouts defined so it's up to underlying JVM and/or operating system when to close the connection so make sure to provide reasonable timeout values, the setting lives at "Advanced" tab of the HTTP Request sampler (or better use HTTP Request Defaults so the setting will be propagated to all HTTP Request samplers so you won't have to change it for each sampler individually)

JSR223 Preprocess performance issue Jmeter

I have an scenario to measure login function performance for that i have used JSR223 preprocessor to encrypt my password using Javascript its around 2000 Line of code it works fine it encrypts the password successfully, i can able to login using my script it works fine in small number of users.
If we go for an large volume of users script finish first 3 steps very fast once it reaches JSR223 preprocessor thread it takes long time to process it makes delay in performance test.
Any suggestion to fine tune this process ?
Already i have configured the cache size as 1024 even though it takes long time to execute.
For 600 Users it takes 1hr +++ time to finish the process with 1 Master and 3 slaves environment.
Javascript should be avoided for Load Testing.
The best option is to use:
Groovy
Check Cache Compilation Key
Enter a unique key per Test element
This will make JMeter compile the script leading to most optimal performances, read this for more informations:
http://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/
If you're looking to learn jmeter correctly, this book will help you.
JavaScript is not the best language to use with JSR223 PreProcessor, it's being run via Rhino or Nashorn engine and your expression is being evaluated all the time from scratch using not very performant way.
According to JMeter Best Practices it is recommended to use Groovy scripting engine. Assuming good configuration you will be able to get groovy scripts compiled into native JVM bytecode hence performance will be much higher than for JavaScript.
In order to get Groovy support in Jmeter you just need to
Download groovy-all.jar
Drop the file to "lib" folder of your JMeter installation
Restart JMeter
See Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! guide for more detailed explanation and scripting best practices.

Resources