You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Dealing with escaped URLs

URLs that are present in HTML pages are usually encoded. For example:

href="/search.cgi?search1=abc&search2=xyx"

If the URL is extracted using a Regular Expression Post-Processor and used directly in another HTTP Sampler, then the sample may well fail, as the server is expecting to see:

/search.cgi?search1=abc&search2=xyx

As of JMeter 2.3.1 there is no automatic way of handling this, however there are some work-rounds. Assume that the URL is stored in the variable ESCAPED_URL.

Using [http://jakarta.apache.org/jmeter/usermanual/functions.html#__jexl Jexl]:

${__jexl(vars.get("ESCAPED_URL").replace("&"\,"&"))}

Using [http://jakarta.apache.org/jmeter/usermanual/functions.html#__BeanShell BeanShell]:

Set the JMeter property beanshell.function.init to point to a file; add the following definition to the file:

// Fix ampersands in a string
String fixAmps(s) {
  return s.replaceAll("&","&");
}

The function can then be called as follows:

${__BeanShell(fixAmps(vars.get("ESCAPED_URL"))}
or
${__BeanShell(fixAmps(vars.get("ESCAPED_URL"),PLAIN_URL)}

The latter function call will store the result in the variable PLAIN_URL The work-rounds above can be extended to handle other transformations such as %20 -> space, %2F -> / and %3A -> :

N.B. the current release of JMeter already contains the fixAmps() function in the file BeanShellFunction.bshrc.

  • No labels