jmeter regarding performance and load testing - jmeter

Let me describe the issue which i have been facing.
i want to do performance and load testing on our internal website. which has login and other functionalities.
the issue i am facing that when i hit 12 or any number of request using http sampler then i am getting same response from all the 12 request. But actual scenario is that webpage displays different data for different page.
I checked using firebug and everything is working fine over there using correct response from request but when i use jmeter i am using same response from every request.
Please let me know if anybody had faced same kind of issue of is there anything i am doing wrong in configuring script.

Try to add HTTP Cookie Manager to your test-plan to the root (Test Plan) node or to the Thread Group node.
As per jmeter documentation:
The last element is a HTTP Cookie Manager. A Cookie Manager should be
added to all web tests - otherwise JMeter will ignore cookies. By
adding it at the Thread Group level, we ensure that all HTTP requests
will share the same cookies.
Ensure that parameters values that are dynamic are not hard-coded (after recording jmeter scripts, for example): no hard-coded JSessionID values in your HTTP requests, e.g..
Ensure you don't miss any necessary params in your HTTP requests.
JMeter does not process Javascript or applets embedded in HTML pages.
Your problem may be caused by this feature.
As per jmeter documentation:
JMeter does not process Javascript or applets embedded in HTML pages.
JMeter can download the relevant resources (some embedded resources
are downloaded automatically if the correct options are set), but it
does not process the HTML and execute any Javascript functions.
If the page uses Javascript to build up a URL or submit a form, you
can use the Proxy Recording facility to create the necessary sampler.
If this is not possible, then manual inspection of the code may be
needed to determine what the Javascript is doing.
I would also recommend your to look first into Jmeter reference before further scripting activities - this may prevent from some faults and frustration.
At least these:
Building a Test Plan
Elements of a Test Plan
Building a Web Test Plan
Building an Advanced Web Test Plan
Hope this helps.

I would suggest - Use Jmeter's Regular Expressions. You may be able to resolve this issue with RegEx. Post using regex, use 'View Results Tree' listener to check if you are getting apt response for each of your threads.
You can also analyze your results using Blazemeter's listener that gives you more insights into your test.

Related

alternate option for window object in jmeter

When we try to encrypt and decrypt the application for front end request and response data,
Window object is not getting support in Jmeter.
As it generate 2 session id .
Kindly let us know any method in Groovy to support .
Window object is specific to the browser
As per JMeter project main page:
JMeter is not a browser, it works at protocol level. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).
So there is no equivalent in any language supported by JMeter's JSR223 Test Elements
The options are in:
Use WebDriver Sampler for getting the session IDs you're looking for, they can be passed later on to "normal" HTTP Request samplers (but this way each JMeter virtual user will kick off a real browser instance)
Extract the code responsible for request encryption and session ID generation using browser developer tools and convert it to something JMeter could execute (remove the browser context), preferably in Groovy as it's the most performing scripting option

Can JMeter do automation testing like Selenium can do?

i am still new to JMeter and i was assigned to a work that I will need to use JMeter to perform automation testing. The idea is to write script using JMeter and run the script to fill in the forms in the website. I was curious that can JMeter use different data from the database to fill in the form of the website everytime it execute?(unique data for every user)
I have followed this tutorial (https://www.blazemeter.com/blog/fill-forms-and-submit-with-jmeter-made-easy/ ) and it succeed, however, when i try to change the parameter name (to some other names that do not matches the field name found in the inpect mode), it still works. So i was wondering how JMeter knows where to put in the parameter even i have change to a wrong field name?
As per JMeter Project main page:
JMeter is not a browser, it works at protocol level. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).
Browsers don't do any magic, they execute HTTP Requests, wait for response and render it. JMeter in its turn can execute the same HTTP requests so traffic would be the same, however it will not render the response, but rather measure the time and collect some more metrics.
If you change the names of the inputs in the form most probably the request will be successful, to wit you will get HTTP Status Code below 400 hence JMeter will mark the result as "green", however if you inspect the response using View Results Tree listener you will see that the form is not filled and/or you still at the same page.
If you want to use JMeter for checking the data returned by the application you're testing consider using JMeter Assertions to test presence of expected values, absence of errors, set response time thresholds, etc.
You can automate the form submission or order placement usin JMeter. You can JMeter for API testing as well by adding assertions. But the main purpose of the JMeter is to test the performance of the application. Its not like selenium which performs actions on the browser whereas JMeter sends the request in various protocols to relevant server and can also simulate many users at the same time.
If you want to do extensive automation testing,JMeter isnt the ideal tool for that.
You can use webdriver sampler to run the selenium with jmeter. It requires to configure sampler and browser config which are plugin and can be downloaded using plugin manager.
For more info:-https://www.blazemeter.com/blog/jmeter-webdriver-sampler/
Now, without the plugin it is working on protocol level and not on the frontend as pointed out in the above comments.
So, yes it can depend on which layer you want to work. It can work on frontend like selenium using the webdriver plugin and can submit the form with different data as a direct request to the server without using the frontend/GUI.
Hope this helps.
It depends on what you are trying to automate. If you plan to automate API invocation where there are some pre-requisites like grabbing tokens, cookies, session IDs from the browser, then JMeter can probably be used where existing JMeter capabilities can be leveraged using BeanShell scripting and other plugins.
But if you plan to have a full blown UI automation framework then JMeter might not be an ideal choice.

Unable to capture a correlate a value on a webpage using JMeter

I am currently trying to record a webpage which includes bundled.js files which are used to build the webpage.
Tool: JMeter version 3.0
The issue is that when I record the page in JMeter and replay the page response does not include all the elements and therefore I am unable to correlate the values that I need to then pass to the next call.
What I have noticed is that if I attach a view results tree to the recorder the values that I am looking for are visible. So they are being captured during the record but not visible on the response when replaying.
I am thinking that the .js files are executed during page load and therefore not being captured and all it shows is the actual
Please help
JMeter does not run client-side JS code at all. JS code is used for rendering on client side, while recording (and replay) in JMeter is done on HTTP level (communication level between client and server). It's the same level you'd see on Net tab in Developer tools of the browser. As far as recording/replay are concerned, those file will only be downloaded, and the client to server traffic they produce will be replayed. But nothing that runs purely on client side will be replayed. So if some magic/logic happens on client side (e.g. calculations, data transformation, etc within JS, which then is sent to the server), you have 2 options:
Duplicate the same logic /dynamic data using JMeter scripting functionality before sending an HTTP request. This is what most commonly people do.
Or another option is to use Selenium sampler and duplicate UI-level behavior, but that type of testing is quite limiting and only fits certain cases

Modify the resource path for a sub-sample in JMeter

I have recorded a user journey in JMeter (using AngularJS). When I click a link that spawns a GET request to a page, in-turn it spawns additional sub-requests to some page resources (images).
In Short:
Test Plan
-- Thread Group
---- Transaction Controller
------ HTTP Request (Main sample)
Here the main sample triggers additional sub-samples for resources and they fail due to path issues however this works manually using a browser.
I am in need to change the path of the sub-samples or not fail on a 404 for these sub-samples.
The fact you are getting different results in browser and JMeter indicates that your JMeter test is not well-behaved as it doesn't replicate browser requests with 100% accuracy therefore your load test doesn't make a lot of sense as "good" load tests must represent real user sitting behind real browser as close as possible. I would recommend comparing requests which are being sent from browser and JMeter with a sniffer tool like Fiddler or Wireshark, identify the differences and amend JMeter configuration so JMeter-driven requests would be exact replica of browser-driven ones (apart from dynamic parameters)
For the time being I can tell you only how to convert failed sub-samples into successful ones.
Add JSR223 PostProcessor as a child of your main request
Put the following code into "Script" area:
prev.getSubResults().each {
it.setSuccessful(true)
}
That's it, the above Groovy code will mark all sub-samples as successful no matter of original status (the response status code, message, body, etc. will remain original, JMeter just won't consider them as failed anymore). See Apache Groovy - Why and How You Should Use It article to learn more about using Groovy scripting in JMeter tests.

Jmeter: Issue with Response Data (HTML) and Is my script Functional?

I am using Jmeter(2.3.2) to create script for one of my application with a scenario which has flow for 4 to 5 pages. I have recorded the script using HTTP Proxy Server. The scripts has been generated successfully under Thread Group >> Recording Controller.
After running the scripts (Threads- 1, Ramp Up period - 1, Loop Count - 1 ), below are the observations I noted in View Results Tree:
The Result Tree view shows all as Checked(Green) - OK
The Sample result for all screens shows Error Count as 0 - OK
But in the response tab when I try to view the results by using 'Render Html' response data - the response data shows the same response for all the requests.
I am getting the response data of the first request for all the other requests.
I am not sure, whether the Jmeter script generated is functional or not? What is the cause for getting the same response data for all the requests?
Please, can anyone let me know what may the issue?
I bet that the same page you're observing is a kind of login page or dashboard which is accessible by unauthenticated user.
First of all make sure that you have HTTP Cookie Manager added to your test plan. It represents browser cookies and deals with user sessions and cookie-based authentication.
If it doesn't resolve your issue the problem is bigger and you will need to do some extra stuff. Modern web applications use multiple mechanisms of current state of things storing and managing, security enhancements and so on. From JMeter's point of view it results in dynamic mandatory parameters. The process of these dynamic parameters extraction from previous request and adding them to next request is called "correlation". So you need to do the following:
Detect which parameters being sent by a recorded script are dynamic. The easiest way is to record the same scenario several times and inspect request bodies to see what is being static and what changes.
Once you figure out which parameters are "interesting" you need to locate them in the first response body/headers/etc.
As soon as you have identified what necessary parameters are and where they live you need to use one of JMeter's PostProcessors to extract required values from previous response and save them to JMeter Variables
Once you have a JMeter Variable it can be used wherever required.
Depending on response data type the most commonly used JMeter's Post Processors which provide correlation capabilities are:
Regular Expression Extractor - the most commonly used test element which covers >90% of needs.
XPath Extractor - better to use against XML data i.e. for testing SOAP Web Services.
CSS/JQuery Extractor - when you need to fetch something from complex HTML where Regular Expression Extractor is useless.
So for putting everything together loog for "jmeter correlation" in your favorite search engine or see ASP.NET Login Testing with JMeter guide.
First JMeter 2.3.2 is WAY TOO OLD (10 years old), upgrade to JMETER 2.11.
Second, Jmeter cannot guess that the response if KO if the returned code is 200, so you need to add Response Assertion that will check for some text you expect in the page.

Resources