Jmeter - Run sample multiple times based on regular expression extractor - regex

I need to run a HTML request multiple times based on a regular expression extractor applied on the same request. I have put the HTML request under while controller however, I am stuck with writing the correct javascript code in while controller.
Here is the while controller code: ${__javaScript("${uidvalue}"=="test")}.
I want the loop to end as soon as a uidvalue from the regular expression extractor is found. Can anybody help me with this?

If I understood your questions correctly, you want to keep on executing one request until response contains specific text.
I am able to do that by using JMeter's while controller.
Add While Controller to Test Plan.
Add request and Put Counter (Add-> Config Element-> Counter)
Please find following image 1 for reference of Counter
Put condition in While Controller following:
${__groovy(("${Status}"!="Success") && ${count} <= 5)}
Always use count to repeat request and avoid JMeter to go in infinite loop.Here I am waiting for 'Success' status and executing request 5 times only.
Please find following image 2 for reference of While loop
Thank you, I hope this helps.

Related

Jmeter : One request - two or more responses - how to Regular Expression Extractor?

Hello.
I met the following problem.
What I should do:
I need to make a performance test of services. I don't have documentation. In this case, I record the requested services and responses using Jmeter and the browser. Then I review every one sample and add a regular expression extractor - if it's needed.
What's the problem?
The problem that I met is when I run the script from Jmeter, some requests have two or more responses. When I use regular expression extractor or response assertion, I noticed that the extractor or assertion is applied only to the last response. So can I apply the regular expression extractor and response assertion to responses that I need?
Here are some screenshots for more details:
This picture shows that we have two responses from one request and you can see details about the first response.
This picture shows details about the second response.
This picture shows the response code for the first response.
Same as the previous picture, but I added a Response Assertion - to check if the assertion works for the first response.
This picture shows the response code for the second response.
This picture shows the assertion failure.
Why has this has happened?
Probably this happened because I hit an URL (endpoint), and this URL forces other requests, that weren't recorded. So... maybe I need to configure the recorder options in another way.
Whats the questions:
Is there is a way to choose what response I can use with a regular expression extractor? For example, there are two responses and I want to use a regular expression extractor to the first one.
Which are the best settings for recording using Jmeter?
"Whats the answers":
No, you have choice between Main sample and sub-samples, main sample only, sub-samples only or JMeter Variable
The ones which are defined in the Recording Template are most probably the best, at least they're better than anything else I've seen so far. The general approach of "recording" might be a big mistake itself, at least for Web 2.0, I believe there are way better options of replicating browser traffic.
Coming back to your first question and possible solutions: you're basically being redirected that's why you're getting 2 subresults, one with status code 302 and another one with 200
With normal Response Assertion you can only amend its configuration to take both status codes as successful:
If you want to test that exactly the first subresult has status code of 302 - you will have to go for JSR223 Assertion and implement the acceptance criteria in Groovy.
Example code:
if (prev.getSubResults().first().getResponseCode() != '302') {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage('Response code mismatch, expected: 302, got: ' + prev.getSubResults().first().getResponseCode())
}

Use of if controller for check condition in jmeter

I need to add a check condition for the search result page that, if a search result is found, the script should run further otherwise it should stop on the same step.
This is my Condition in if controller:
${__javaScript("${depdate}"=! null)}
Here depdate is the regex parameter. If search results are found then its value will be null otherwise it will display content. It's a part of a json string.
I have put all further step in the if controller, but not success. Can anyone help me out of this? What is the reason that this is not working.
What is wrong here with what I am performing?
The reason is that your "${depdate}" will never be null.
If ${depdate} variable is set - it will be variable value
If ${depdate} variable is not set - it will be default value (which is ${depdate}
Demo:
So change your expression to be `${__javaScript(vars.get("depdate") != null)} and everything should start working fine.
See How to Use JMeter's 'IF' Controller and get Pie guide for more information on using IF conditions in your JMeter test.

How to in JMeter use regular expression extractor to fill request in loop

I've got simple test plan:
Jdbs Conection
JDBC request
For Each Loop on jdbc response
|-Regular Expression Extractor (Post processor)
|-Soap Request where I need extracted value from Regular Expression Extractor
|-Response assertion
The problem is when the first loop is executed. SOAP request is filled with name of variable from Regular Expression Extractor not the value. Can anyone tell me how to get around this problem?
[Edit] test plan screen
As you can see on the first image is showing jdbc response data . On first position is value '22;1'. Second one is showing first soap request failed not a values but names of variables... Third one is showing second request filled correctly
http://postimg.org/image/owl5kue4v/
Below is screen when I add Debug Sampler to for each loop. In this situation first SOAP request is filled correctly.
http://postimg.org/image/aad3c0ngt/
My problem is how to get the same behavior like in second situation but without adding Debug Sampler?
BTW, Sorry for the images on an external server, but my rank is too low to add them here
Your test plan should be in the format mentioned in the attached snapshot:
Hope this will help

Regular Expression Extractor not maintaining the variable value

Regex Extractor is working fine at first. I can get it to pull the correct value - a groupID - from the response in the previous HTTP request. And, I turn around and use the variable in the HTTP request immediately after the Extractor. That works great as well. I can see the value in the response was the same as the one placed in the post for the next request.
Few requests later I try to use the variable again when I need the groupID passed again. But, when I look I see the default value I put in the Extractor instead of the value from the response.
My question is two fold: is this extractor only expected to generate a temporary variable?
And, if so, is there a way to plug this variable into something else for later reuse?
Or, did I just miss something?
Well, I found my mistake. It would have helped if I read the information under the post-processor section before I read about the extractor...
I did not have the extractor as a child of the HTTP request. I had it as the next step.
Once I nested it as a child all was right with the world. The variable stays as it was and is not changing after every step.
Lesson learned - RTFM. Or, at least the online documentation a bit more thoroughly!
Jamie

Google Analytics Reg Ex isn't tracking goal URL

Alright, i've played around with this for over a week now and I can't get it to work. Using a regular expression match:
My GOAL URL:
category=thanks
This is not tracking correctly
My only goal step:
/s.nl\?c=1025622&n=5&sc=[0-9]+&ext=T&add=[0-9]&whence=
This is tracking correctly but it is saying everybody exits on this step and does not go to my goal URL
Upon looking at pages that contain category=thanks, I found the following tracked URLs
/s.nl?c=1025622&sc=44&category=thanks&whence=&n=5
/s.nl?c=1025622&sc=44&category=thanks&n=5
/s.nl?c=1025622&sc=44&category=thanks&whence=&n=5&redirect_count=1&did_javascript_redirect=T
/s.nl?c=1025622&n=5&sc=44&category=thanks&it=A&login=T
along with a bunch of other containing category=thanks. As I obviously can't compensate for all these changing URL, I figured just having "category=thanks" would work, but apparently not?
Your category=thanks statement is not a regular expression that matches the URLs you mentioned. It would apply for filters and segments where there's a 'URI contains' option, but not a full match.
I beleive you have 2 options:
Go to Content report in GA, choose a larger time period (like a year) and add a category=thanks filter. You'll get all possible goal URLs. For them you'll have to write a regular expression. From what you describe, your URL structure is a mess (too many parametrs), so take a look at option 2.
Add a small script to your goal page that would redirect your visitors to a page with a clean url. Something like a conditional statement saying if (URL contains category=thanks) {redirect to /thankyou.html}, then use this thankyou.html as a goal in GA.