Regex - Unable to capture boundaries - jmeter

I am having challenges capturing the dynamic value using regular expression in JMeter.
Tried the below Regex but it did not work. Have no idea how to handle | |
RegEx: dataItem|sm|(.+?)==
Response Code:
|ManageCards|136|dataItem|sm|JEGTzZZa9Wt4I4VMJXZ3Wb/DBPXFfXXp4keKKiDkZRx4UoLweXzodJsKG3G+gq73MLlydBc8gPZLggmsscrorEBtZL3dD1e1+3GHHga2uJ/5Y5JakcPjgsuwx1591nmyY7EjCg==|83|scriptStartupBlock|ScriptContentWithTags|{"text":" var API_KEY = \u0027MX84-CC53-JJ99-FU96\u0027;","type":"text/javascript"}|
Dynamic Value to Capture:
JEGTzZZa9Wt4I4VMJXZ3Wb/DBPXFfXXp4keKKiDkZRx4UoLweXzodJsKG3G+gq73MLlydBc8gPZLggmsscrorEBtZL3dD1e1+3GHHga2uJ/5Y5JakcPjgsuwx1591nmyY7EjCg==

Check the below RegEx:-
You can also make it from |sm| also. Just use \ before the pipe symbol.
Hope this helps.

Related

Remove specific parts from url

Lets suppose I have a url like this:
https://www.youtube.com/watch/3e4345?v=rwmEkvPBG1s
What is the best and shorthest way to only get the 3e4345 part?
Sometimes it doesn't contain additional params in ?
I don't want to use any gems.
What I did was:
url = url.split('/watch/')
url = url[1].split('/')[0].split('?')[0]
Is there a better way? Thanks
possibly the safest and best one. use URI.
URI("https://www.youtube.com/watch/34345?v=rwmEkvPBG1s").path.split("/").last
For more refer How to extract URL parameters from a URL with Ruby or Rails?
You could do the following and using the match function to find a match based on a regular expression statement. The value at [1] is the first capture from the regular expression. I have included a breakdown from regexper.com to help illustrate what the expression is accomplishing.
You will notice parentheses around the \d+ which are what captures the digits out of the URL when it matches.
url.to_s.match(/\/watch\/(\d+).*$/)[1]
x = "https://www.youtube.com/watch/34345?v=rwmEkvPBG1s"
File.basename(URI(x).path)
=> "34345"

Extracting javascript variable and passing to next Jmeter request

The Response data look like following within Script tag
var csrfParam =
"SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD=y2G5Of06jgHbkNdHNleFKiXoBMC62veD";
var securityTokenName = "SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD";
var securityTokenValue = "y2G5Of06jgHbkNdHNleFKiXoBMC62veD";
I'm using regular expression extractor as following:
Reference name : MYREF
Regular Expression : securityTokenName ="(.+?)" securityTokenValue="(.+?)"
Template : $1$$2$
I'm access this variable in next Jmeter request to build the URL:
${MYREF_g1}
${MYREF_g2}
Expecting to get MYREF_g1 =SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD
and MYREF_g2 =y2G5Of06jgHbkNdHNleFKiXoBMC62veD
But THIS is not working .
Any help would appreciated!
It looks like that you're misunderstanding what groups and templates are.
As per Using RegEx (Regular Expression Extractor) with JMeter
Template. The template used to create a string from the matches found.
This is an arbitrary string with special elements to refer to groups
within the regular expression. The syntax to refer to a group is:
'$1$' to refer to group 1, '$2$' to refer to group 2, etc. $0$ refers
to whatever the entire expression matches. So, if you have in response
word “economics” and search for regular expression “(ec)(onomics)” and
apply template $2$$1$ than in output variable you will receive
“onomicsec”.
So your RegEx should look like:
var securityTokenName = "(.+?)"; var securityTokenValue = "(.+?)";
So
securityTokenName will be stored in JMeter Variable MYREF_g1
securityTokenValue will be stored in JMeter Variable MYREF_g2
View Results Tree Listener has built-in RegExp Tester on ResponseData tab. You can also use Debug Sampler to see what variables have been set by your Regular Expression Extractor.
You need multiline regex match. Your regex will look like this
(?s)securityTokenName="(.+?)".*?securityTokenValue="(.+?)";
A sample test plan (it uses dummy sampler from jmeter plugins, if you don't have them it will faile) is here.
This post here discusses that simply having .*? will match multiple line, but apparently it did not work. This post wast the savior.
Details are from the jmeter documentation are here.
Please note that I have removed the spaces around = to simplify my sample. Please change the regex appropriately.

Jmeter - How Can I Replace a string and resend it?

I'm trying to create a script that will take a URL out of a response and send it out again.
Using the regular expression extractor I've succeeded in taking the wanted URL, but it holds "&" so naturally when sending it out the request fails.
Example:
GET http://[ia-test01.inner-active.mobi:8080/simpleM2M/ClientUpdateStatus?cn=WS2006&v=2_1_0-iOS-2_0_3_7&ci=99999&s=3852719769860497476&cip=113-170-93-111&po=642&re=1&lt=0&cc=VN&acp=&pcp=]/
I'm trying to replace the "&" with a "&".
I've tried: ${__javaScript(${url}.replace("&","&"))}
But it did not work. I've tried the regex function as well- the same.
I'm not sure the IP field in the request supports the us e of functions.
I'm currently trying to use the beanshell post-processor. But I'm pretty sure there is a simpler solution I'm missing.
Not sure what you're trying to get by replacing & with & however will try to respond.
First of all: given multiple & instances you need to use replaceall function, not replace
Second: replace / replaceall functions take a RegEx as parameter, so you'll need to escape your &
If you're trying to substitute URL Path in realtime, you'll need Beanshell Pre Processor, not the Post Processor
Sample Beanshell Pre-Processor code
import java.net.URL;
URL myURL = sampler.getUrl();
String path = myURL.getPath();
String path_replaced = path.replaceAll("\\&", "&");
vars.put("NEW_PATH", path_replaced);
After that put ${NEW_PATH} to "Path:" section of your HTTP Request.
Hope this helps.
Solution with less code:
Install the Custom JMeter Functions plugin
Use the following syntax
${__strReplace(ImAGoodBoy,Good,Bad,replaceVar)}
‘ImAGoodBoy’ is a string in which replacement will take place
‘Good’ is a substring to be replaced
‘Bad’ is the replacement string
‘replaceVar’ is a variable to save result string
Refer this URL for more info!
Thank a lot. However, i see from a recent experience that to replace a character that is actually a RegExp special character, like \ " ( ) etc, you need to put 3 backslashes and not 1, not 2. This is weird.
so you write
var res = str.replaceAll("\\\\u003c", "<");
to replace \u003c with <

PowerCenter - Regular Expressions

I got the following regular expression:
=([^"]*)
Basically I want to extract a value between = and " (example: "City=Paris", output "Paris"). But for some reason this expression wont work in PowerCenter.
You got any idea how to implement it?
Thank you
Thomas
You can try this
REG_EXTRACT('"City=Paris"','(.*\w+=)(\w+)(".*)',2)
This basically breaks up the string in three groups of characters and returns the second group.

How can I find a specific link in the HTML response Code with the name?

I have a html link structure like that <a href=dynamicURL>LinkName</a>.
I want to extract the LinkName, so I can take the dynamic URL from the link for next HTML Request.
Is there any solution with a script or something like that?
Use a Regular Expression Extractor with the regex:
<a\shref=([^>]+)>LinkName<\/a>
\s = space
[^>]+ = everything not equal to >
\/ = escaping the forward slash
Try this site, it makes learning regular expressions easy.

Resources