<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title>Apache JMeter
          -
          User's Manual: Functions and Variables</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/new-style.css">
<link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
<link rel="icon" href="../images/favicon.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body role="document">
<a href="#content" class="hidden">Main content</a>
<div class="header">
<!--
            APACHE LOGO
          -->
<div>
<a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
</div>
<!--
              PROJECT LOGO
            -->
<div>
<a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
<div class="clear"></div>
</div>
</div>
<div class="nav">
<ul class="menu">
<li onClick="return true">
<div class="menu-title">About</div>
<ul>
<li>
<a href="../index.html">Overview</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Download</div>
<ul>
<li>
<a href="../download_jmeter.cgi">Download Releases</a>
</li>
<li>
<a href="../changes.html">Release Notes</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Documentation</div>
<ul>
<li>
<a href="../usermanual/get-started.html">Get Started</a>
</li>
<li>
<a href="../usermanual/index.html">User Manual</a>
</li>
<li>
<a href="../usermanual/best-practices.html">Best Practices</a>
</li>
<li>
<a href="../usermanual/component_reference.html">Component Reference</a>
</li>
<li>
<a href="../usermanual/functions.html">Functions Reference</a>
</li>
<li>
<a href="../usermanual/properties_reference.html">Properties Reference</a>
</li>
<li>
<a href="../changes_history.html">Change History</a>
</li>
<li>
<a href="../api/index.html">Javadocs</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Tutorials</div>
<ul>
<li>
<a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>
<li>
<a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>
<li>
<a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Community</div>
<ul>
<li>
<a href="../issues.html">Issue Tracking</a>
</li>
<li>
<a href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a href="../mail.html">Mailing Lists</a>
</li>
<li>
<a href="../svnindex.html">Source Repositories</a>
</li>
<li>
<a href="../building.html">Building and Contributing</a>
</li>
<li>
<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Foundation</div>
<ul>
<li>
<a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="main" id="content">
<div class="social-media">
<ul class="social-media-links">
<li class="twitter">
<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
</li>
<li class="github">
<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
</li>
</ul>
</div>
<ul class="pagelinks">
<li>
<a href="properties_reference.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="regular_expressions.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="functions">20. Functions and Variables<a class="sectionlink" href="#functions" title="Link to here">&para;</a>
</h1>

<p>
JMeter functions are special values that can populate fields of any Sampler or other
element in a test tree.  A function call looks like this:</p>


<p>
<span class="code">${__functionName(var1,var2,var3)}</span>
</p>


<p>
Where "__functionName" matches the name of a function.
<br>
Parentheses surround the parameters sent to the function, for example <span class="code">${__time(YMD)}</span>
The actual parameters vary from function to function.
Functions that require no parameters can leave off the parentheses, for example <span class="code">${__threadNum}</span>.
</p>


<p>
If a function parameter contains a comma, then be sure to escape this with "<span class="code">\</span>", otherwise JMeter will treat it as a parameter delimiter.
For example:
<pre class="source">
${__time(EEE\, d MMM yyyy)}
</pre>
If the comma is not escaped - e.g. <span class="code">${__javaScript(Math.max(2,5))}</span> - you will get an error such as:
<pre class="source">
ERROR - jmeter.functions.JavaScript: Error processing Javascript: [Math.max(2]
    org.mozilla.javascript.EvaluatorException: missing ) after argument list (&lt;cmd&gt;#1)
 </pre>
 This is because the string "<span class="code">Math.max(2,5)</span>" is treated as being two parameters to the __javascript function:<br>
 
<span class="code">Math.max(2</span> and <span class="code">5)</span>
<br>
 Other error messages are possible.
</p>

<p>Variables are referenced as follows:
<pre>
${VARIABLE}
</pre>

</p>

<p>

<b>
If an undefined function or variable is referenced, JMeter does not report/log an error - the reference is returned unchanged.
For example if <span class="code">UNDEF</span> is not defined as a variable, then the value of <span class="code">${UNDEF}</span> is <span class="code">${UNDEF}</span>.
</b>
Variables, functions (and properties) are all case-sensitive.
<b>
JMeter trims spaces from variable names before use, so for example
<span class="code">${__Random(1,63,&nbsp;LOTTERY&nbsp;)}</span> will use the variable '<span class="code">LOTTERY</span>' rather than '<span class="code">&nbsp;LOTTERY&nbsp;</span>'.
</b>

</p>

<div class="clear"></div>
<div class="note">
Properties are not the same as variables.
Variables are local to a thread; properties are common to all threads,
and need to be referenced using the <span class="code">__P</span> or <span class="code">__property</span> function.
</div>
<div class="clear"></div>

<div class="clear"></div>
<div class="note">
When using <span class="code">\</span> before a variable for a windows path for example <span class="code">C:\test\${test}</span>, ensure you escape the <span class="code">\</span>
otherwise JMeter will not interpret the variable, example:
<span class="code">C:\\test\\${test}</span>.
<br>
Alternatively, just use <span class="code">/</span> instead for the path separator - e.g. <span class="code">C:/test/${test}</span> - Windows JVMs will convert the separators as necessary.
</div>
<div class="clear"></div>

<p>List of functions, loosely grouped into types.</p>

<table>

        
<tr>
<th>Type of function</th><th>Name</th><th>Comment</th><th>Since</th>
</tr>
        
        
<tr>
<td>Information</td><td> <a href="#__threadNum">threadNum</a></td><td>get thread number</td><td>1.X</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__threadGroupName">threadGroupName</a></td><td>get thread group name</td><td>4.1</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__samplerName">samplerName</a></td><td>get the sampler name (label)</td><td>2.5</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__machineIP">machineIP</a></td><td>get the local machine IP address</td><td>2.6</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__machineName">machineName</a></td><td>get the local machine name</td><td>1.X</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__time">time</a></td><td>return current time in various formats</td><td>2.2</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__timeShift">timeShift</a></td><td>return a date in various formats with the specified amount of seconds/minutes/hours/days added</td><td>3.3</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__log">log</a></td><td>log (or display) a message (and return the value)</td><td>2.2</td>
</tr>
        
<tr>
<td>Information</td><td> <a href="#__logn">logn</a></td><td>log (or display) a message (empty return value)</td><td>2.2</td>
</tr>
        
<tr>
<td>Input</td><td> <a href="#__StringFromFile">StringFromFile</a></td><td>read a line from a file</td><td>1.9</td>
</tr>
        
<tr>
<td>Input</td><td> <a href="#__FileToString">FileToString</a></td><td>read an entire file</td><td>2.4</td>
</tr>
        
<tr>
<td>Input</td><td> <a href="#__CSVRead">CSVRead</a></td><td>read from CSV delimited file</td><td>1.9</td>
</tr>
        
<tr>
<td>Input</td><td> <a href="#__XPath">XPath</a></td><td>Use an XPath expression to read from a file</td><td>2.0.3</td>
</tr>
        
<tr>
<td>Input</td><td> <a href="#__StringToFile">StringToFile</a></td><td>write a string to a file</td><td>5.2</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__counter">counter</a></td><td>generate an incrementing number</td><td>1.X</td>
</tr>
        
<tr>
<td>Formatting</td><td> <a href="#__dateTimeConvert">dateTimeConvert</a></td><td>Convert a date or time from source to target format</td><td>4.0</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__digest">digest</a></td><td>Generate a digest (SHA-1, SHA-256, MD5...)</td><td>4.0</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__intSum">intSum</a></td><td>add int numbers</td><td>1.8.1</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__longSum">longSum</a></td><td>add long numbers</td><td>2.3.2</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__Random">Random</a></td><td>generate a random number</td><td>1.9</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__RandomDate">RandomDate</a></td><td>generate random date within a specific date range</td><td>3.3</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__RandomFromMultipleVars">RandomFromMultipleVars</a></td><td>extracts an element from the values of a set of variables separated by <span class="code">|</span></td><td>3.1</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__RandomString">RandomString</a></td><td>generate a random string</td><td>2.6</td>
</tr>
        
<tr>
<td>Calculation</td><td> <a href="#__UUID">UUID</a></td><td>generate a random type 4 UUID</td><td>2.9</td>
</tr>
        
<tr>
<td>Scripting</td><td> <a href="#__groovy">groovy</a></td><td>run a Groovy script</td><td>3.1</td>
</tr>
        
<tr>
<td>Scripting</td><td> <a href="#__BeanShell">BeanShell</a></td><td>run a BeanShell script</td><td>1.X</td>
</tr>
        
<tr>
<td>Scripting</td><td> <a href="#__javaScript">javaScript</a></td><td>process JavaScript (Nashorn)</td><td>1.9</td>
</tr>
        
<tr>
<td>Scripting</td><td> <a href="#__jexl2">jexl2</a></td><td>evaluate a Commons Jexl2 expression</td><td>jexl2(2.1.1)</td>
</tr>
        
<tr>
<td>Scripting</td><td> <a href="#__jexl3">jexl3</a></td><td>evaluate a Commons Jexl3 expression</td><td>jexl3 (3.0)</td>
</tr>
        
<tr>
<td>Properties</td><td> <a href="#__isPropDefined">isPropDefined</a> </td><td>Test if a property exists</td><td>4.0</td>
</tr>
        
<tr>
<td>Properties</td><td> <a href="#__property">property</a> </td><td>read a property</td><td>2.0</td>
</tr>
        
<tr>
<td>Properties</td><td> <a href="#__P">P</a></td><td>read a property (shorthand method)</td><td>2.0</td>
</tr>
        
<tr>
<td>Properties</td><td> <a href="#__setProperty">setProperty</a></td><td>set a JMeter property</td><td>2.1</td>
</tr>
        
<tr>
<td>Variables</td><td> <a href="#__split">split</a></td><td>Split a string into variables</td><td>2.0.2</td>
</tr>
        
<tr>
<td>Variables</td><td> <a href="#__eval">eval</a></td><td>evaluate a variable expression</td><td>2.3.1</td>
</tr>
        
<tr>
<td>Variables</td><td> <a href="#__evalVar">evalVar</a></td><td>evaluate an expression stored in a variable</td><td>2.3.1</td>
</tr>
        
<tr>
<td>Properties</td><td> <a href="#__isVarDefined">isVarDefined</a> </td><td>Test if a variable exists</td><td>4.0</td>
</tr>
        
<tr>
<td>Variables</td><td> <a href="#__V">V</a></td><td>evaluate a variable name</td><td>2.3RC3</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__char">char</a></td><td>generate Unicode char values from a list of numbers</td><td>2.3.3</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__changeCase">changeCase</a></td><td>Change case following different modes</td><td>4.0</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__escapeHtml">escapeHtml</a></td><td>Encode strings using HTML encoding</td><td>2.3.3</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__escapeOroRegexpChars">escapeOroRegexpChars</a></td><td>quote meta chars used by ORO regular expression</td><td>2.9</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__escapeXml">escapeXml</a></td><td>Encode strings using XMl encoding</td><td>3.2</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__regexFunction">regexFunction</a></td><td>parse previous response using a regular expression</td><td>1.X</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__unescape">unescape</a></td><td>Process strings containing Java escapes (e.g. \n &amp; \t)</td><td>2.3.3</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__unescapeHtml">unescapeHtml</a></td><td>Decode HTML-encoded strings</td><td>2.3.3</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__urldecode">urldecode</a></td><td>Decode a application/x-www-form-urlencoded string</td><td>2.10</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__urlencode">urlencode</a></td><td>Encode a string to a application/x-www-form-urlencoded string</td><td>2.10</td>
</tr>
        
<tr>
<td>String</td><td> <a href="#__TestPlanName">TestPlanName</a></td><td>Return name of current test plan</td><td>2.6</td>
</tr>

</table>

<p></p>

<div class="subsection">
<h2 id="what_can_do">20.1 What can functions do<a class="sectionlink" href="#what_can_do" title="Link to here">&para;</a>
</h2>

<p>There are two kinds of functions: user-defined static values (or variables), and built-in functions.<br>
User-defined static values allow the user to define variables to be replaced with their static value when
a test tree is compiled and submitted to be run.  This replacement happens once at the beginning of the test
run.  This could be used to replace the DOMAIN field of all HTTP requests, for example - making it a simple
matter to change a test to target a different server with the same test.
</p>

<p>
Note that variables cannot currently be nested; i.e. <span class="code">${Var${N}}</span> does not work.
The <span class="code">__V</span> (variable) function can be used to do this: <span class="code">${__V(Var${N})}</span>.
You can also use <span class="code">${__BeanShell(vars.get("Var${N}")}</span>.
</p>

<p>This type of replacement is possible without functions, but was less convenient and less intuitive.
It required users to create default config elements that would fill in blank values of Samplers.
Variables allow one to replace only part of any given value, not just filling in blank values.</p>

<p>
With built-in functions users can compute new values at run-time based on previous response data, which
thread the function is in, the time, and many other sources.  These values are generated fresh for every
request throughout the course of the test. </p>

<div class="clear"></div>
<div class="note">Functions are shared between threads.
Each occurrence of a function call in a test plan is handled by a separate function instance.</div>
<div class="clear"></div>

</div>


<div class="subsection">
<h2 id="where">20.2 Where can functions and variables be used?<a class="sectionlink" href="#where" title="Link to here">&para;</a>
</h2>

<p>
Functions and variables can be written into any field of any test component (apart from the TestPlan - see below).
Some fields do not allow random strings
because they are expecting numbers, and thus will not accept a function.  However, most fields will allow
functions.
</p>

<p>
Functions which are used on the Test Plan have some restrictions.
JMeter thread variables will have not been fully set up when the functions are processed,
so variable names passed as parameters will not be set up, and variable references will not work,
so <span class="code">split()</span> and <span class="code">regex()</span> and the variable evaluation functions won't work.
The <span class="code">threadNum()</span> function won't work (and does not make sense at test plan level).
The following functions should work OK on the test plan:
<ul>

<li>intSum</li>

<li>longSum</li>

<li>machineName</li>

<li>BeanShell</li>

<li>groovy</li>

<li>javaScript</li>

<li>jexl2/jexl3</li>

<li>random</li>

<li>time</li>

<li>property functions</li>

<li>log functions</li>

</ul>

</p>

<p>
Configuration elements are processed by a separate thread.
Therefore functions such as <span class="code">__threadNum</span> do not work properly in elements such as User Defined Variables.
Also note that variables defined in a UDV element are not available until the element has been processed.
</p>

<div class="clear"></div>
<div class="note">When using variable/function references in SQL code (etc.),
remember to include any necessary quotes for text strings,
i.e. use
<pre class="source">
SELECT item from table where name='${VAR}'
</pre>

<b>not</b>

<pre class="source">
SELECT item from table where name=${VAR}
</pre>
(unless <span class="code">VAR</span> itself contains the quotes)
</div>
<div class="clear"></div>

</div>


<div class="subsection">
<h2 id="how">20.3 How to reference variables and functions<a class="sectionlink" href="#how" title="Link to here">&para;</a>
</h2>

<p>Referencing a variable in a test element is done by bracketing the variable name with '<span class="code">${</span>' and '<span class="code">}</span>'.</p>

<p>Functions are referenced in the same manner, but by convention, the names of
functions begin with "<span class="code">__</span>" to avoid conflict with user value names<sup>*</sup>.  Some functions take arguments to
configure them, and these go in parentheses, comma-delimited.  If the function takes no arguments, the parentheses can
be omitted.</p>


<p>
<b>Argument values that themselves contain commas should be escaped as necessary.
If you need to include a comma in your parameter value, escape it like so: '<span class="code">\,</span>'.</b>
This applies for example to the scripting functions - Javascript, Beanshell, Jexl, groovy - where it is necessary to escape any commas
that may be needed in script method calls - e.g.
</p>

<pre>
${__BeanShell(vars.put("name"\,"value"))}
</pre>

<p>
Alternatively, you can define your script as a variable, e.g. on the Test Plan:
<pre>SCRIPT          vars.put("name","value")</pre>
The script can then be referenced as follows:
<pre>${__BeanShell(${SCRIPT})}</pre>
There is no need to escape commas in the <span class="code">SCRIPT</span> variable because the function call is parsed before the variable is replaced with its value.
This works well in conjunction with the JSR223 or BeanShell Samplers, as these can be used to test Javascript, Jexl and BeanShell scripts.
</p>

<p>
Functions can reference variables and other functions, for example
<span class="code">${__XPath(${__P(xpath.file),${XPATH})}</span>
will use the property "<span class="code">xpath.file</span>" as the file name
and the contents of the variable <span class="code">XPATH</span> as the expression to search for.
</p>

<p>
JMeter provides a tool to help you construct
function calls for various built-in functions, which you can then copy-paste.
It will not automatically escape values for you, since functions can be parameters to other functions, and you should only escape values you intend as literal.
</p>

<div class="clear"></div>
<div class="note">
If a string contains a backslash('<span class="code">\</span>') and also contains a function or variable reference, the backslash will be removed if
it appears before '<span class="code">$</span>' or '<span class="code">,</span>' or '<span class="code">\</span>'.
This behaviour is necessary to allow for nested functions that include commas or the string <span class="code">${</span>.
Backslashes before '<span class="code">$</span>' or '<span class="code">,</span>' or '<span class="code">\</span>' are not removed if the string does not contain a function or variable reference.
</div>
<div class="clear"></div>

<p>

<b>The value of a variable or function can be reported</b> using the <a href="#__logn"><span class="code">__logn()</span></a> function.
The <span class="code">__logn()</span> function reference can be used anywhere in the test plan after the variable has been defined.
Alternatively, the Java Request sampler can be used to create a sample containing variable references;
the output will be shown in the appropriate Listener.
Note there is a <a href="../usermanual/component_reference.html#Debug_Sampler">Debug Sampler</a>
that can be used to display the values of variables etc. in the Tree View Listener.
</p>

<div class="clear"></div>
<div class="note">
<sup>*</sup>If you define a user-defined static variable with the same name as a built-in function, your static
variable will override the built-in function.</div>
<div class="clear"></div>

</div>


<div class="subsection">
<h2 id="function_helper">20.4 The Function Helper Dialog<a class="sectionlink" href="#function_helper" title="Link to here">&para;</a>
</h2>

<p>The Function Helper dialog is available from JMeter's Tools menu.</p>

<figure>
<a href="../images/screenshots/function_helper_dialog.png"><img src="../images/screenshots/function_helper_dialog.png" width="831" height="305" alt="Function Helper Dialog"></a>
<figcaption>Function Helper Dialog</figcaption>
</figure>

<p>Using the Function Helper, you can select a function from the pull down, and assign
values for its arguments.  The left column in the table provides a brief description of the
argument, and the right column is where you write in the value for that argument.  Different
functions take different arguments.</p>

<p>Once you have done this, click the "generate" button, and the appropriate string is generated
for you to copy-paste into your test plan wherever you like.</p>

</div>


<div class="subsection">
<h2 id="functions">20.5 Functions<a class="sectionlink" href="#functions" title="Link to here">&para;</a>
</h2>


<div class="component">
<h2 id="__regexFunction">__regexFunction<a class="sectionlink" href="#__regexFunction" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The Regex Function is used to parse the previous response (or the value of a variable) using any regular
expression (provided by user).  The function returns the template string with variable values filled
in.</p>

<p>The <span class="code">__regexFunction</span> can also store values for future use.  In the sixth parameter, you can specify
a reference name.  After this function executes, the same values can be retrieved at later times
using the syntax for user-defined values.  For instance, if you enter "<span class="code">refName</span>" as the sixth
parameter you will be able to use:
<ul>

<li>
<span class="code">${refName}</span> to refer to the computed result of the second parameter ("Template for the
replacement string") parsed by this function</li>

<li>
<span class="code">${refName_g0}</span> to refer to the entire match  parsed by this function.</li>

<li>
<span class="code">${refName_g1}</span> to refer to the first group parsed by this function.</li>

<li>
<span class="code">${refName_g#}</span> to refer to the n<sup>th</sup> group parsed by this function.</li>

<li>
<span class="code">${refName_matchNr}</span> to refer to the number of groups found by this function.</li>

</ul>

<div class="clear"></div>
<div class="note">If using distributed testing, ensure you switch mode (see <span class="code">jmeter.properties</span>) so that it's not a stripping one, see <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=56376">
      Bug
      56376</a>
</div>
<div class="clear"></div>

</p>

</div>
<div class="properties">
<h3 id="__regexFunction_parms1">
        Parameters
        <a class="sectionlink" href="#__regexFunction_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">First argument</div>
<div class="description req-true">The first argument is the regular expression
        to be applied to the response data.  It will grab all matches.  Any parts of this expression
        that you wish to use in your template string, be sure to surround in parentheses.  Example:
        <span class="code">&lt;a href="(.*)"&gt;</span>.  This will grab the value of the link and store it as the first group (there is
        only 1 group).  Another example: <span class="code">&lt;input type="hidden" name="(.*)" value="(.*)"&gt;</span>.  This will
        grab the name as the first group, and the value as the second group.  These values can be used
        in your template string</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Second argument</div>
<div class="description req-true">This is the template string that will replace
        the function at run-time.  To refer to a group captured in the regular expression, use the syntax:
        <span class="code">$[group_number]$</span>.  I.e.: <span class="code">$1$</span>, or <span class="code">$2$</span>.  Your template can be any string.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Third argument</div>
<div class="description req-false">The third argument tells JMeter which match
        to use.  Your regular expression might find numerous matches.  You have four choices:
                <ul>
<li>An integer - Tells JMeter to use that match.  '<span class="code">1</span>' for the first found match, '<span class="code">2</span>' for the
                second, and so on</li>
                
<li>
<span class="code">RAND</span> - Tells JMeter to choose a match at random.</li>
                
<li>
<span class="code">ALL</span> - Tells JMeter to use all matches, and create a template string for each one and then
                append them all together.  This option is little used.</li>
                
<li>A float number between 0 and 1 - tells JMeter to find the X<sup>th</sup> match using the formula:
                (number_of_matches_found * float_number) rounded to nearest integer.</li>
                
</ul>
</div>
<div class="required req-false">No, default=1</div>
</div>
        
<div class="property">
<div class="name req-false">Fourth argument</div>
<div class="description req-false">If '<span class="code">ALL</span>' was selected for the above argument
        value, then this argument will be inserted between each appended copy of the template value.</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Fifth argument</div>
<div class="description req-false">Default value returned if no match is found</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Sixth argument</div>
<div class="description req-false">A reference name for reusing the values parsed by this function.<br>
        Stored values are <span class="code">${refName}</span> (the replacement template string) and <span class="code">${refName_g#}</span> where "<span class="code">#</span>" is the
        group number from the regular expression ("<span class="code">0</span>" can be used to refer to the entire match).</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Seventh argument</div>
<div class="description req-false">Input variable name.
        If specified, then the value of the variable is used as the input instead of using the previous sample result.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__counter">__counter<a class="sectionlink" href="#__counter" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The counter generates a new number each time it is called, starting with 1
and incrementing by +1 each time.  The counter can be configured to keep each simulated user's values
separate, or to use the same counter for all users.  If each user's values is incremented separately,
that is like counting the number of iterations through the test plan.  A global counter is like
counting how many times that request was run.
</p>

<p>The counter uses an integer variable to hold the count, which therefore has a maximum of 2,147,483,647.</p>

<p>The counter function instances are completely independent.
The global counter - "<span class="code">FALSE</span>" - is separately maintained by each counter instance.
</p>

<p>

<b>
Multiple <span class="code">__counter</span> function calls in the same iteration won't increment the value further.
</b>

<br>
If you want to have a count that increments for each sample, use the function in a Pre-Processor such as <a href="../usermanual/component_reference.html#User_Parameters">User Parameters</a>.
</p>

</div>
<div class="properties">
<h3 id="__counter_parms1">
        Parameters
        <a class="sectionlink" href="#__counter_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">First argument</div>
<div class="description req-true">
<span class="code">TRUE</span> if you wish each simulated user's counter
        to be kept independent and separate from the other users.  <span class="code">FALSE</span> for a global counter.</div>
<div class="required req-true">Yes</div>
</div>


<div class="property">
<div class="name req-false">Second argument</div>
<div class="description req-false">A reference name for reusing the value created by this function.<br>
                Stored values are of the form <span class="code">${refName}</span>.  This allows you to keep one counter and refer to its value in
                multiple places.</div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__threadNum">__threadNum<a class="sectionlink" href="#__threadNum" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The thread number function simply returns the number of the thread currently
being executed.  These numbers are only locally unique with respect to their ThreadGroup, meaning thread #1 in one threadgroup
is indistinguishable from thread #1 in another threadgroup, from the point of view of this function.</p>

<div class="clear"></div>
<div class="note">The function returns a number between one and the max number of running threads. Note that if you're using
JSR223 code with <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object (<span class="code">ctx</span> variable),
the below code returns a number between zero and (max number of running threads minus one)
<pre class="source">ctx.getThreadNum()</pre>

</div>
<div class="clear"></div>


<p>There are no arguments for this function.</p>

<p>Usage Example:
<pre class="source">${__threadNum}</pre> returns a number between 1 and the max number of running threads configured in the containing Thread Group
</p>

</div>
<div class="clear"></div>
<div class="note">
This function does not work in any Configuration elements (e.g. User Defined Variables) as these are run from a separate thread.
Nor does it make sense to use it on the Test Plan.
</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__threadGroupName">__threadGroupName<a class="sectionlink" href="#__threadGroupName" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The thread group name function simply returns the name of the thread group
being executed.</p>


<p>There are no arguments for this function.</p>

<p>Usage Example:
<pre class="source">${__threadGroupName}</pre>

</p>

</div>
<div class="clear"></div>
<div class="note">
This function does not work in any Configuration elements (e.g. User Defined Variables) as these are run from a separate thread.
Nor does it make sense to use it on the Test Plan.
</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__intSum">__intSum<a class="sectionlink" href="#__intSum" title="Link to here">&para;</a>
</h2>
<div class="description">

<p>
The intSum function can be used to compute the sum of two or more integer values.
</p>

<div class="clear"></div>
<div class="note">
The reference name is optional, but it must not be a valid integer.
</div>
<div class="clear"></div>

</div>
<div class="properties">
<h3 id="__intSum_parms1">
        Parameters
        <a class="sectionlink" href="#__intSum_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">First argument</div>
<div class="description req-true">The first int value.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Second argument</div>
<div class="description req-true">The second int value.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">nth argument</div>
<div class="description req-false">The n<sup>th</sup> int value.</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">last argument</div>
<div class="description req-false">A reference name for reusing the value computed by this function.
                If specified, the reference name must contain at least one non-numeric character otherwise it will
                be treated as another int value to be added.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__intSum(2,5,MYVAR)}</pre> will return 7 (2+5) and store the result in MYVAR variable. So <span class="code">${MYVAR}</span> will be equal to 7. <br>

<pre class="source">${__intSum(2,5,7)}</pre> will return 14 (2+5+7) and store the result in MYVAR variable. <br>

<pre class="source">${__intSum(1,2,5,${MYVAR})}</pre> will return 16 if MYVAR value is equal to 8, 1+2+5+${MYVAR})<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__longSum">__longSum<a class="sectionlink" href="#__longSum" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The longSum function can be used to compute the sum of two or more long values, use this instead of __intSum whenever you know your values will not
be in the interval -2147483648 to 2147483647.
</p>
</div>
<div class="properties">
<h3 id="__longSum_parms1">
        Parameters
        <a class="sectionlink" href="#__longSum_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">First argument</div>
<div class="description req-true">The first long value.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Second argument</div>
<div class="description req-true">The second long value.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">nth argument</div>
<div class="description req-false">The n<sup>th</sup> long value.</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">last argument</div>
<div class="description req-false">A reference name for reusing the value computed by this function.
                If specified, the reference name must contain at least one non-numeric character otherwise it will
                be treated as another long value to be added.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__longSum(2,5,MYVAR)}</pre> will return 7 (2+5) and store the result in MYVAR variable. So <span class="code">${MYVAR}</span> will be equal to 7. <br>

<pre class="source">${__longSum(2,5,7)}</pre> will return 14 (2+5+7) and store the result in MYVAR variable. <br>

<pre class="source">${__longSum(1,2,5,${MYVAR})}</pre> will return 16 if MYVAR value is equal to 8, 1+2+5+${MYVAR})<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__StringFromFile">__StringFromFile<a class="sectionlink" href="#__StringFromFile" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The StringFromFile function can be used to read strings from a text file.
    This is useful for running tests that require lots of variable data.
    For example when testing a banking application, 100s or 1000s of different account numbers might be required.
    </p>
    
<p>
    See also the
    <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config test element</a>
    which may be easier to use. However, that does not currently support multiple input files.
    </p>

    
<p>
    Each time it is called it reads the next line from the file.
    All threads share the same instance, so different threads will get different lines.
    When the end of the file is reached, it will start reading again from the beginning,
    unless the maximum loop count has been reached.
    If there are multiple references to the function in a test script, each will open the file independently,
    even if the file names are the same.
    [If the value is to be used again elsewhere, use different variable names for each function call.]
    </p>
    
<div class="clear"></div>
<div class="note">
    Function instances are shared between threads, and the file is (re-)opened by whatever thread
    happens to need the next line of input, so using the <span class="code">threadNumber</span> as part of the file name
    will result in unpredictable behaviour.
    </div>
<div class="clear"></div>
    
<p>If an error occurs opening or reading the file, then the function returns the string "<span class="code">**ERR**</span>"</p>

</div>
<div class="properties">
<h3 id="__StringFromFile_parms1">
        Parameters
        <a class="sectionlink" href="#__StringFromFile_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">File Name</div>
<div class="description req-true">Path to the file name.
            (The path can be relative to the JMeter launch directory)
            If using optional sequence numbers, the path name should be suitable for passing to DecimalFormat.
            See below for examples.
        </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">
A reference name - <span class="code">refName</span> - for reusing the value created by this function. Stored values are of the form <span class="code">${refName}</span>.
Defaults to "<span class="code">StringFromFile_</span>".
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Start sequence number</div>
<div class="description req-false">Initial Sequence number (if omitted, the End sequence number is treated as a loop count)</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">End   sequence number</div>
<div class="description req-false">Final sequence number (if omitted, sequence numbers can increase without limit)</div>
<div class="required req-false">No</div>
</div>

</div>
<p>The file name parameter is resolved when the file is opened or re-opened.</p>
<p>The reference name parameter (if supplied) is resolved every time the function is executed.</p>
<p>
<b>Using sequence numbers:</b>
</p>
<p>When using the optional sequence numbers, the path name is used as the format string for <span class="code">java.text.DecimalFormat</span>.
    The current sequence number is passed in as the only parameter.
    If the optional start number is not specified, the path name is used as is.
    Useful formatting sequences are:
    </p>
<dl>

<dt>
<span class="code">#</span>
</dt>
<dd>insert the number, with no leading zeros or spaces</dd>

<dt>
<span class="code">000</span>
</dt>
<dd>insert the number packed out to three digits with leading zeros if necessary</dd>

</dl>
<div class="example">
<div class="title">Usage of format strings<a class="sectionlink" href="#string-from-file-format-examples" title="Link to here">&para;</a>
</div>
Here are a few format strings and the corresponding sequences they will generate.
<dl>
  
<dt>
<span class="code">pin#'.'dat</span>
</dt>
<dd>Will generate the digits without leading zeros and treat the dot literally like<br>
    
<span class="code">pin1.dat</span>, &hellip;, <span class="code">pin9.dat</span>, <span class="code">pin10.dat</span>, &hellip;, <span class="code">pin9999.dat</span>
</dd>
  
<dt>
<span class="code">pin000'.'dat</span>
</dt>
<dd>Will generate leading zeros while keeping the dot. When the numbers start having more digits
    then those three digits that this format suggests, the sequence will use more digits as can be seen in<br>
    
<span class="code">pin001.dat</span>, &hellip; <span class="code">pin099.dat</span>, &hellip;, <span class="code">pin999.dat</span>, &hellip;, <span class="code">pin9999.dat</span>
</dd>
  
<dt>
<span class="code">pin'.'dat#</span>
</dt>
<dd>Will append digits without leading zeros while keeping the dot and generate<br>
    
<span class="code">pin.dat1</span>, &hellip;, <span class="code">pin.dat9</span>, &hellip;, <span class="code">pin.dat999</span>
</dd>

</dl>

</div>
<p>
    If more digits are required than there are formatting characters, the number will be
    expanded as necessary.<br>
    
<b>To prevent a formatting character from being interpreted,
    enclose it in single quotes. Note that "<span class="code">.</span>" is a formatting character,
    and must be enclosed in single quotes</b>
    (though <span class="code">#.</span> and <span class="code">000.</span> work as expected in locales where the decimal point is also "<span class="code">.</span>")
    <br>
    In other locales (e.g. <span class="code">fr</span>), the decimal point is "<span class="code">,</span>" - which means that "<span class="code">#.</span>"
    becomes "<span class="code">nnn,</span>".<br>
    See the documentation for <span class="code">DecimalFormat</span> for full details.<br>
    If the path name does not contain any special formatting characters,
    the current sequence number will be appended to the name, otherwise
    the number will be inserted according to the formatting instructions.<br>
    If the start sequence number is omitted, and the end sequence number is specified,
    the sequence number is interpreted as a loop count, and the file will be used at most "<span class="code">end</span>" times.
    In this case the filename is not formatted.
    <br>
    
<span class="code">${__StringFromFile(PIN#'.'DAT,,1,2)}</span> - reads <span class="code">PIN1.DAT</span>, <span class="code">PIN2.DAT</span>
<br>
    
<span class="code">${__StringFromFile(PIN.DAT,,,2)}</span> - reads <span class="code">PIN.DAT</span> twice<br>
    Note that the "<span class="code">.</span>" in <span class="code">PIN.DAT</span> above should <u>not</u> be quoted.
    In this case the start number is omitted, so the file name is used exactly as is.
    </p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__machineName">__machineName<a class="sectionlink" href="#__machineName" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The machineName function returns the local host name. This uses the Java method <span class="code">InetAddress.getLocalHost()</span> and passes it to <span class="code">getHostName()</span>
</p>
</div>
<div class="properties">
<h3 id="__machineName_parms1">
        Parameters
        <a class="sectionlink" href="#__machineName_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__machineName()}</pre> will return the host name of the machine<br>

<pre class="source">${__machineName}</pre> will return the host name of the machine<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__machineIP">__machineIP<a class="sectionlink" href="#__machineIP" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The machineIP function returns the local IP address. This uses the Java method <span class="code">InetAddress.getLocalHost()</span> and passes it to <span class="code">getHostAddress()</span>
</p>
</div>
<div class="properties">
<h3 id="__machineIP_parms1">
        Parameters
        <a class="sectionlink" href="#__machineIP_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__machineIP()}</pre> will return the IP address of the machine<br>

<pre class="source">${__machineIP}</pre> will return the IP address of the machine<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__javaScript">__javaScript<a class="sectionlink" href="#__javaScript" title="Link to here">&para;</a>
</h2>
<div class="description">

<p>
The javaScript function executes a piece of JavaScript (not Java!) code and returns its value
</p>

<p>
The JMeter Javascript function calls a standalone JavaScript interpreter.
Javascript is used as a scripting language, so you can do calculations etc.</p>

<p>

<div class="clear"></div>
<div class="note">javaScript is not the best scripting language for performances in JMeter. If your plan requires a high number of threads
it is advised to use <span class="code">__jexl3</span> or <span class="code">__groovy</span> functions.
</div>
<div class="clear"></div>

For Nashorn Engine, please see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/">Java Platform, Standard Edition Nashorn User's Guide</a>.<br>
For Rhino engine, please see <a href="http://www.mozilla.org/rhino/overview.html">Mozilla Rhino Overview</a>

</p>

<p>
The following variables are made available to the script:
</p>

<ul>

<li>
<span class="code">log</span> - the <a href="https://www.slf4j.org/api/org/slf4j/Logger.html">Logger</a> for the function</li>

<li>
<span class="code">ctx</span> - <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object</li>

<li>
<span class="code">vars</span> - <a href="../api/org/apache/jmeter/threads/JMeterVariables.html">JMeterVariables</a> object</li>

<li>
<span class="code">threadName</span> - String containing the current thread name</li>

<li>
<span class="code">sampler</span> - current <a href="../api/org/apache/jmeter/samplers/Sampler.html">Sampler</a> object (if any)</li>

<li>
<span class="code">sampleResult</span> - previous <a href="../api/org/apache/jmeter/samplers/SampleResult.html">SampleResult</a> object (if any)</li>

<li>
<span class="code">props</span> - JMeterProperties (class <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html"><span class="code">java.util.Properties</span></a>) object</li>

</ul>

<p>
Rhinoscript allows access to static methods via its Packages object.
See the <a href="https://wiki.openjdk.java.net/display/Nashorn/Rhino+Migration+Guide">Scripting Java</a> documentation.
For example one can access the JMeterContextService static methods thus:
<span class="code">Java.type("org.apache.jmeter.threads.JMeterContextService").getTotalThreads()</span>

</p>

<div class="clear"></div>
<div class="note">
JMeter is not a browser, and does not interpret the JavaScript in downloaded pages.
</div>
<div class="clear"></div>

</div>
<div class="properties">
<h3 id="__javaScript_parms1">
        Parameters
        <a class="sectionlink" href="#__javaScript_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Expression</div>
<div class="description req-true">The JavaScript expression to be executed. For example:
            <ul>
                
<li>
<span class="code">new Date()</span> - return the current date and time</li>
                
<li>
<span class="code">Math.floor(Math.random()*(${maxRandom}+1))</span>
                    - a random number between <span class="code">0</span> and the variable <span class="code">maxRandom</span>
</li>
                
<li>
<span class="code">${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1))</span>
                    - a random number between the variables <span class="code">minRandom</span> and <span class="code">maxRandom</span>
</li>
                
<li>
<span class="code">"${VAR}"=="abcd"</span>
</li>
            
</ul>
            
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<div class="clear"></div>
<div class="note">Remember to include any necessary quotes for text strings and JMeter variables. Also, if
the expression has commas, please make sure to escape them. For example in:
<pre class="source">
${__javaScript('${sp}'.slice(7\,99999))}
</pre>
the comma after <span class="code">7</span> is escaped.</div>
<div class="clear"></div>
<p>Examples:
<pre class="source">${__javaScript(new Date())}</pre> will return <span class="code">Sat Jan 09 2016 16:22:15 GMT+0100 (CET)</span>
<br>

<pre class="source">${__javaScript(new Date(),MYDATE)}</pre> will return <span class="code">Sat Jan 09 2016 16:22:15 GMT+0100 (CET)</span> and store it under variable <span class="code">MYDATE</span>
<br>

<pre class="source">${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}</pre> will use maxRandom variable, return a random value between 0 and maxRandom and store it in MYRESULT
<pre class="source">${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}</pre> will use <span class="code">maxRandom</span> and <span class="code">minRandom</span> variables, return a random value between <span class="code">maxRandom</span> and <span class="code">minRandom</span> and store it under variable <span class="code">MYRESULT</span>

<pre class="source">${__javaScript("${VAR}"=="abcd",MYRESULT)}</pre> will compare the value of <span class="code">VAR</span> variable with <span class="code">abcd</span>, return <span class="code">true</span> or <span class="code">false</span> and store the result in MYRESULT
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__Random">__Random<a class="sectionlink" href="#__Random" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The random function returns a random number that lies between the given min and max values.</p>
</div>
<div class="properties">
<h3 id="__Random_parms1">
        Parameters
        <a class="sectionlink" href="#__Random_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Minimum value</div>
<div class="description req-true">A number</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Maximum value</div>
<div class="description req-true">A bigger number</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__Random(0,10)}</pre> will return a random number between 0 and 10<br>

<pre class="source">${__Random(0,10, MYVAR)}</pre> will return a random number between 0 and 10 and store it in <span class="code">MYVAR</span>. <span class="code">${MYVAR}</span> will contain the random number<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__RandomDate">__RandomDate<a class="sectionlink" href="#__RandomDate" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The RandomDate function returns a random date that lies between the given start date and end date values.</p>
</div>
<div class="properties">
<h3 id="__RandomDate_parms1">
        Parameters
        <a class="sectionlink" href="#__RandomDate_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Time format</div>
<div class="description req-false">Format string for DateTimeFormatter (default <span class="code">yyyy-MM-dd</span>)</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Start date</div>
<div class="description req-false">The start date, the default is <em>now</em>
</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-true">End date</div>
<div class="description req-true">The end date</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Locale to use for format</div>
<div class="description req-false">
        The string format of a locale. The language code must be lowercase. The country code must be uppercase. The separator must be an underscore, e.g. <span class="code">en_EN</span>.
        See <a href="http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html">http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html</a>.
        If omitted, by default the function uses the Apache JMeter locale one.
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__RandomDate(,,2050-07-08,,)}</pre> will return a random date between <em>now</em> and <span class="code">2050-07-08</span>. For example <span class="code">2039-06-21</span>
<br>

<pre class="source">${__RandomDate(dd MM yyyy,,08 07 2050,,)}</pre> will return a random date with a custom format like <span class="code">04 03 2034</span>
<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__RandomString">__RandomString<a class="sectionlink" href="#__RandomString" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The RandomString function returns a random String of length using characters in chars to use.</p>
</div>
<div class="properties">
<h3 id="__RandomString_parms1">
        Parameters
        <a class="sectionlink" href="#__RandomString_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Length</div>
<div class="description req-true">A number length of generated String</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Characters to use</div>
<div class="description req-false">Chars used to generate String</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__RandomString(5)}</pre> will return a random string of 5 characters which can be readable or not<br>

<pre class="source">${__RandomString(10,abcdefg)}</pre> will return a random string of 10 characters picked from <span class="code">abcdefg</span> set, like <span class="code">cdbgdbeebd</span> or <span class="code">adbfeggfad</span>, &hellip;<br>

<pre class="source">${__RandomString(6,a12zeczclk, MYVAR)}</pre> will return a random string of 6 characters picked from <span class="code">a12zeczclk</span> set and store the result in <span class="code">MYVAR</span>, <span class="code">MYVAR</span> will contain
string like <span class="code">2z22ak</span> or <span class="code">z11kce</span>, &hellip;<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__RandomFromMultipleVars">__RandomFromMultipleVars<a class="sectionlink" href="#__RandomFromMultipleVars" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The RandomFromMultipleVars function returns a random value based on the variable values provided by <span class="code">Source Variables</span>.</p>
The variables can be simple or multi-valued as they can be generated by the following extractors:
<ul>
    
<li>
<a href="component_reference.html#Boundary_Extractor">Boundary Extractor</a>
</li>
    
<li>
<a href="component_reference.html#Regular_Expression_Extractor">Regular Expression Extractor</a>
</li>
    
<li>
<a href="component_reference.html#CSS_Selector_Extractor">CSS Selector Extractor</a>
</li>
    
<li>
<a href="component_reference.html#JSON_Extractor">JSON Extractor</a>
</li>
    
<li>
<a href="component_reference.html#XPath_Extractor">XPath Extractor</a>
</li>
    
<li>
<a href="component_reference.html#XPath2_Extractor">XPath2 Extractor</a>
</li>

</ul>

Multi-value vars are the ones that are extracted when you set <span class="code">-1</span> for <span class="code">Match Numbers</span>.
This leads to creation of match number variable called <span class="code">varName_matchNr</span> and for each value to the creation of variable <span class="code">varName_n</span> where n = 1, 2, 3 etc.

</div>
<div class="properties">
<h3 id="__RandomFromMultipleVars_parms1">
        Parameters
        <a class="sectionlink" href="#__RandomFromMultipleVars_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Source Variables</div>
<div class="description req-true">Variable names separated by <span class="code">|</span> that contain the values that will be used as input for random computation</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__RandomFromMultipleVars(val)}</pre> will return a random string based on content of variable val taking into account wether they are multi-value or not<br>

<pre class="source">${__RandomFromMultipleVars(val1|val2)}</pre> will return a random string based on content of variables val1 and val2 taking into account wether they are multi-value or not<br>

<pre class="source">${__RandomFromMultipleVars(val1|val2, MYVAR)}</pre> will return a random string based on content of variables val1 and val2 taking into account wether they are multi-value or not and store the result in <span class="code">MYVAR</span>
<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>



<div class="component">
<h2 id="__UUID">__UUID<a class="sectionlink" href="#__UUID" title="Link to here">&para;</a>
</h2>
<div class="description">

<p>The UUID function returns a pseudo random type 4 Universally Unique IDentifier (UUID).</p>

</div>
<div class="properties">
<h3 id="__UUID_parms1">
        Parameters
        <a class="sectionlink" href="#__UUID_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>

</div>
<p>Examples:
<pre class="source">${__UUID()}</pre> will return UUIDs with this format : <span class="code">c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd</span> 
<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__CSVRead">__CSVRead<a class="sectionlink" href="#__CSVRead" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The CSVRead function returns a string from a CSV file (c.f. <a href="#__StringFromFile">StringFromFile</a>)</p>
    
<p>NOTE: JMeter supports multiple file names.
    </p>
    
<p>
<b>In most cases, the newer
    <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config element</a>
     is easier to use.</b>
</p>
    
<p>
    When a filename is first encountered, the file is opened and read into an internal
    array. If a blank line is detected, this is treated as end of file - this allows
    trailing comments to be used.
    </p>
    
<p>All subsequent references to the same file name use the same internal array.
    N.B. the filename case is significant to the function, even if the OS doesn't care,
    so <span class="code">CSVRead(abc.txt,0)</span> and <span class="code">CSVRead(aBc.txt,0)</span> would refer to different internal arrays.
    </p>
    
<p>
    The <span class="code">*ALIAS</span> feature allows the same file to be opened more than once,
    and also allows for shorter file names.
    </p>
    
<p>
    Each thread has its own internal pointer to its current row in the file array.
    When a thread first refers to the file it will be allocated the next free row in
    the array, so each thread will access a different row from all other threads.
    [Unless there are more threads than there are rows in the array.]
    </p>
    
<div class="clear"></div>
<div class="note">The function splits the line at every comma by default.
    If you want to enter columns containing commas, then you will need
    to change the delimiter to a character that does not appear in any
    column data, by setting the property: <span class="code">csvread.delimiter</span>
    
</div>
<div class="clear"></div>

</div>
<div class="properties">
<h3 id="__CSVRead_parms1">
        Parameters
        <a class="sectionlink" href="#__CSVRead_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">File Name</div>
<div class="description req-true">The file (or <span class="code">*ALIAS</span>) to read from</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Column number</div>
<div class="description req-true">
            The column number in the file.
            <span class="code">0</span> = first column, <span class="code">1</span> = second etc.
            "<span class="code">next</span>" - go to next line of file.
            <span class="code">*ALIAS</span> - open a file and assign it to the alias
            </div>
<div class="required req-true">Yes</div>
</div>

</div>
<p>For example, you could set up some variables as follows:
<ul>

<li>COL1a <span class="code">${__CSVRead(random.txt,0)}</span>
</li>

<li>COL2a <span class="code">${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}</span>
</li>

<li>COL1b <span class="code">${__CSVRead(random.txt,0)}</span>
</li>

<li>COL2b <span class="code">${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}</span>
</li>

</ul>
This would read two columns from one line, and two columns from the next available line.
If all the variables are defined on the same User Parameters Pre-Processor, then the lines
will be consecutive. Otherwise, a different thread may grab the next line.
</p>
<div class="clear"></div>
<div class="note">
The function is not suitable for use with large files, as the entire file is stored in memory.
For larger files, use <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config element</a>
or <a href="#__StringFromFile">StringFromFile</a>.
</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__property">__property<a class="sectionlink" href="#__property" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>The property function returns the value of a JMeter property.
    If the property value cannot be found, and no default has been supplied, it returns the property name.
    When supplying a default value, there is no need to provide a function name - the parameter can be set to null, and it will be ignored.
    </p>For example:<p>
        
<ul>

<li>
<span class="code">${__property(user.dir)}</span> - return value of <span class="code">user.dir</span>
</li>

<li>
<span class="code">${__property(user.dir,UDIR)}</span> - return value of <span class="code">user.dir</span> and save in <span class="code">UDIR</span>
</li>

<li>
<span class="code">${__property(abcd,ABCD,atod)}</span> - return value of property <span class="code">abcd</span> (or "<span class="code">atod</span>" if not defined) and save in <span class="code">ABCD</span>
</li>

<li>
<span class="code">${__property(abcd,,atod)}</span> - return value of property <span class="code">abcd</span> (or "<span class="code">atod</span>" if not defined) but don't save it</li>

</ul>

</p>
    
</div>
<div class="properties">
<h3 id="__property_parms1">
        Parameters
        <a class="sectionlink" href="#__property_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Property Name</div>
<div class="description req-true">The property name to be retrieved.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">A reference name for reusing the value
                computed by this function.</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Default Value</div>
<div class="description req-false">The default value for the property.</div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__P">__P<a class="sectionlink" href="#__P" title="Link to here">&para;</a>
</h2>
<div class="description">
<p>This is a simplified property function which is
    intended for use with properties defined on the command line.
    Unlike the <span class="code">__property</span> function, there is no option to save the value in a variable,
    and if no default value is supplied, it is assumed to be 1.
    The value of 1 was chosen because it is valid for common test variables such
    as loops, thread count, ramp up etc.
    </p>For example:<p>

<span class="code">
Define the property value:
<pre class="source">
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
</pre>

Fetch the values:
<br>

<span class="code">${__P(group1.threads)}</span> - return the value of <span class="code">group1.threads</span>

<br>

<span class="code">${__P(group1.loops)}</span> - return the value of <span class="code">group1.loops</span>

<br>

<span class="code">${__P(hostname,www.dummy.org)}</span> - return value of property <span class="code">hostname</span> or <span class="code">www.dummy.org</span> if not defined
<br>

</span>
In the examples above, the first function call would return <span class="code">7</span>,
the second would return <span class="code">1</span> and the last would return <span class="code">www.dummy.org</span>
(unless those properties were defined elsewhere!)
</p>
    
</div>
<div class="properties">
<h3 id="__P_parms1">
        Parameters
        <a class="sectionlink" href="#__P_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Property Name</div>
<div class="description req-true">The property name to be retrieved.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Default Value</div>
<div class="description req-false">The default value for the property.
            If omitted, the default is set to "<span class="code">1</span>".</div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__log">__log<a class="sectionlink" href="#__log" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The log function logs a message, and returns its input string
    </p>

</div>
<div class="properties">
<h3 id="__log_parms1">
        Parameters
        <a class="sectionlink" href="#__log_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to be logged</div>
<div class="description req-true">A string</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Log Level</div>
<div class="description req-false">
<span class="code">OUT</span>, <span class="code">ERR</span>, <span class="code">DEBUG</span>, <span class="code">INFO</span> (default), <span class="code">WARN</span> or <span class="code">ERROR</span>
</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Throwable text</div>
<div class="description req-false">If non-empty, creates a Throwable to pass to the logger</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Comment</div>
<div class="description req-false">If present, it is displayed in the string.
        Useful for identifying what is being logged.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>The <span class="code">OUT</span> and <span class="code">ERR</span> log level names are used to direct the output to <span class="code">System.out</span> and <span class="code">System.err</span> respectively.
    In this case, the output is always printed - it does not depend on the current log setting.
</p>
<dl>
  
<dt>
<span class="code">${__log(Message)}</span>
</dt>
<dd>written to the log file as   "<span class="code"> &hellip; thread Name : Message</span>"</dd>
  
<dt>
<span class="code">${__log(Message,OUT)}</span>
</dt>
<dd>written to console window</dd>
  
<dt>
<span class="code">${__log(${VAR},,,VAR=)}</span>
</dt>
<dd>written to log file as "<span class="code"> &hellip; thread Name VAR=value</span>"</dd>

</dl>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__logn">__logn<a class="sectionlink" href="#__logn" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The logn function logs a message, and returns the empty string
    </p>

</div>
<div class="properties">
<h3 id="__logn_parms1">
        Parameters
        <a class="sectionlink" href="#__logn_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to be logged</div>
<div class="description req-true">A string</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Log Level</div>
<div class="description req-false">
<span class="code">OUT</span>, <span class="code">ERR</span>, <span class="code">DEBUG</span>, <span class="code">INFO</span> (default), <span class="code">WARN</span> or <span class="code">ERROR</span>
</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Throwable text</div>
<div class="description req-false">If non-empty, creates a Throwable to pass to the logger</div>
<div class="required req-false">No</div>
</div>

</div>
<p>The <span class="code">OUT</span> and <span class="code">ERR</span> log level names are used to direct the output to <span class="code">System.out</span> and <span class="code">System.err</span> respectively.
    In this case, the output is always printed - it does not depend on the current log setting.
</p>
<dl>
  
<dt>
<span class="code">${__logn(VAR1=${VAR1},OUT)}</span>
</dt>
<dd>write the value of the variable to the console window</dd>

</dl>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__BeanShell">__BeanShell<a class="sectionlink" href="#__BeanShell" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The BeanShell function evaluates the script passed to it, and returns the result.
</p>

<div class="clear"></div>
<div class="note">For performance it is better to use <a href="#__groovy">__groovy</a> function</div>
<div class="clear"></div>

<p>

<b>For full details on using BeanShell, please see the BeanShell web-site at <a href="http://www.beanshell.org/">http://www.beanshell.org/</a>
</b>

</p>

<div class="clear"></div>
<div class="note">
Note that a different Interpreter is used for each independent occurrence of the function
in a test script, but the same Interpreter is used for subsequent invocations.
This means that variables persist across calls to the function.
</div>
<div class="clear"></div>

<p>
A single instance of a function may be called from multiple threads.
However the function <span class="code">execute()</span> method is synchronised.
</p>

<p>
If the property "<span class="code">beanshell.function.init</span>" is defined, it is passed to the Interpreter
as the name of a sourced file. This can be used to define common methods and variables. There is a
sample init file in the bin directory: <span class="code">BeanShellFunction.bshrc</span>.
</p>

<p>
The following variables are set before the script is executed:
<ul>

<li>
<span class="code">log</span> - the <a href="https://www.slf4j.org/api/org/slf4j/Logger.html">Logger</a> for the BeanShell function (*)</li>

<li>
<span class="code">ctx</span> - <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object</li>

<li>
<span class="code">vars</span> - <a href="../api/org/apache/jmeter/threads/JMeterVariables.html">JMeterVariables</a> object</li>

<li>
<span class="code">props</span> - JMeterProperties (class <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html"><span class="code">java.util.Properties</span></a>) object</li>

<li>
<span class="code">threadName</span> - the threadName (String)</li>

<li>
<span class="code">Sampler</span> - the current <a href="../api/org/apache/jmeter/samplers/Sampler.html">Sampler</a>, if any</li>

<li>
<span class="code">SampleResult</span> - the current <a href="../api/org/apache/jmeter/samplers/SampleResult.html">SampleResult</a>, if any</li>

</ul>
(*) means that this is set before the init file, if any, is processed.
Other variables vary from invocation to invocation.
</p>

</div>
<div class="properties">
<h3 id="__BeanShell_parms1">
        Parameters
        <a class="sectionlink" href="#__BeanShell_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">BeanShell script</div>
<div class="description req-true">A beanshell script (not a file name)</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">A reference name for reusing the value
               computed by this function.</div>
<div class="required req-false">No</div>
</div>


</div>
<p>
Example:
<dl>

<dt>
<span class="code">${__BeanShell(123*456)}</span>
</dt>
<dd>returns <span class="code">56088</span>
</dd>

<dt>
<span class="code">${__BeanShell(source("function.bsh"))}</span>
</dt>
<dd>processes the script in <span class="code">function.bsh</span>
</dd>

</dl>

</p>
<div class="clear"></div>
<div class="note">
Remember to include any necessary quotes for text strings and JMeter variables that represent text strings.
</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__groovy">__groovy<a class="sectionlink" href="#__groovy" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The <span class="code">__groovy</span> function evaluates <a href="http://groovy-lang.org/">Apache Groovy</a> scripts passed to it, and returns the result.
</p>

<p>
If the property "<span class="code">groovy.utilities</span>" is defined, it will be loaded by the ScriptEngine.
This can be used to define common methods and variables. There is a
sample init file in the <span class="code">bin</span> directory: <span class="code">utility.groovy</span>.
</p>

<p>
The following variables are set before the script is executed:
</p>

<ul>

<li>
<span class="code">log</span> - the <a href="https://www.slf4j.org/api/org/slf4j/Logger.html">Logger</a> for the groovy function (*)</li>

<li>
<span class="code">ctx</span> - <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object</li>

<li>
<span class="code">vars</span> - <a href="../api/org/apache/jmeter/threads/JMeterVariables.html">JMeterVariables</a> object</li>

<li>
<span class="code">props</span> - JMeterProperties (class <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html"><span class="code">java.util.Properties</span></a>) object</li>

<li>
<span class="code">threadName</span> - the threadName (String)</li>

<li>
<span class="code">sampler</span> - the current <a href="../api/org/apache/jmeter/samplers/Sampler.html">Sampler</a>, if any</li>

<li>
<span class="code">prev</span> - the previous <a href="../api/org/apache/jmeter/samplers/SampleResult.html">SampleResult</a>, if any</li>

<li>
<span class="code">OUT</span> - System.out</li>

</ul>

<p>
(*) means that this is set before the init file, if any, is processed.
Other variables vary from invocation to invocation.
</p>

<div class="clear"></div>
<div class="note">
When using this function please use the variables defined above rather than using string replacement to access a variable in your script.  Following this pattern will ensure that your tests are performant by ensuring that the Groovy can be cached.
</div>
<div class="clear"></div>

<p>
For instance <strong>don't</strong> do the following:
</p>


<p>
<pre class="source">${__groovy("${myVar}".substring(0\,2))}</pre>
</p>


<p>Imagine that the variable myVar changes with each transaction, the Groovy above cannot be cached as the script changes each time.<br>
<br>
Instead do the following, which can be cached: <pre class="source">${__groovy(vars.get("myVar").substring(0\,2))}</pre>

</p>

</div>
<div class="properties">
<h3 id="__groovy_parms1">
        Parameters
        <a class="sectionlink" href="#__groovy_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Expression to evaluate</div>
<div class="description req-true">A groovy script (not a file name)
        <div class="clear"></div>
<div class="note">Argument values that themselves contain commas should be escaped as necessary.
        If you need to include a comma in your parameter value, escape it like this: '<span class="code">\,</span>'</div>
<div class="clear"></div>
        
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">A reference name for reusing the value
               computed by this function.</div>
<div class="required req-false">No</div>
</div>


</div>
<p>
Example:
<dl>

<dt>
<pre class="source">${__groovy(123*456)}</pre>
</dt>
<dd>returns <span class="code">56088</span>
</dd>

<dt>
<pre class="source">${__groovy(vars.get("myVar").substring(0\,2))}</pre>
</dt>
<dd>If var's value is <span class="code">JMeter</span>, it will return <span class="code">JM</span> as it runs <span class="code">String.substring(0,2)</span>. Note
that <span class="code">,</span> has been escaped to <span class="code">\,</span> 
</dd>

</dl>

</p>
<div class="clear"></div>
<div class="note">
Remember to include any necessary quotes for text strings and JMeter variables that represent text strings.
</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>



<div class="component">
<h2 id="__split">__split<a class="sectionlink" href="#__split" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The split function splits the string passed to it according to the delimiter,
    and returns the original string. If any delimiters are adjacent, "<span class="code">?</span>" is returned as the value.
    The split strings are returned in the variables <span class="code">${VAR_1}</span>, <span class="code">${VAR_2}</span> etc.
    The count of variables is returned in <span class="code">${VAR_n}</span>.
    A trailing delimiter is treated as a missing variable, and "<span class="code">?</span>" is returned.
    Also, to allow it to work better with the ForEach controller,
    <span class="code">__split</span> now deletes the first unused variable in case it was set by a previous split.
    </p>
    
<p></p>
    Example:
    <br>
    Define <span class="code">VAR</span>="<span class="code">a||c|</span>" in the test plan.
    <br>
    
<pre class="source">${__split(${VAR},VAR,|)}</pre>
    
<br>
    This will return the contents of <span class="code">VAR</span>, i.e. "<span class="code">a||c|</span>" and set the following variables:
    <br>
        
<span class="code">VAR_n</span>=<span class="code">4</span>
    
<br>
        
<span class="code">VAR_1</span>=<span class="code">a</span>
    
<br>
        
<span class="code">VAR_2</span>=<span class="code">?</span>
    
<br>
        
<span class="code">VAR_3</span>=<span class="code">c</span>
    
<br>
        
<span class="code">VAR_4</span>=<span class="code">?</span>
    
<br>
        
<span class="code">VAR_5</span>=<span class="code">null</span>

</div>
<div class="properties">
<h3 id="__split_parms1">
        Parameters
        <a class="sectionlink" href="#__split_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to split</div>
<div class="description req-true">A delimited string, e.g. "<span class="code">a|b|c</span>"</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Name of variable</div>
<div class="description req-true">A reference name for reusing the value
               computed by this function.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Delimiter</div>
<div class="description req-false">The delimiter character, e.g. <span class="code">|</span>.
If omitted, <span class="code">,</span> is used. Note that <span class="code">,</span> would need to be specified as <span class="code">\,</span>.
</div>
<div class="required req-false">No</div>
</div>


</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__XPath">__XPath<a class="sectionlink" href="#__XPath" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The XPath function reads an XML file and matches the XPath.
    Each time the function is called, the next match will be returned.
    At end of file, it will wrap around to the start.
    If no nodes matched, then the function will return the empty string,
    and a warning message will be written to the JMeter log file.
    <div class="clear"></div>
<div class="note">Note that the entire NodeList is held in memory.</div>
<div class="clear"></div>
    
</p>
    
<p></p>
    Example:
    <pre class="source">${__XPath(/path/to/build.xml, //target/@name)}</pre>
    This will match all targets in <span class="code">build.xml</span> and return the contents of the next name attribute
</div>
<div class="properties">
<h3 id="__XPath_parms1">
        Parameters
        <a class="sectionlink" href="#__XPath_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">XML file to parse</div>
<div class="description req-true"> a XML file to parse</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">XPath</div>
<div class="description req-true"> a XPath expression to match nodes in the XML file</div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__setProperty">__setProperty<a class="sectionlink" href="#__setProperty" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The setProperty function sets the value of a JMeter property.
        The default return value from the function is the empty string,
        so the function call can be used anywhere functions are valid.</p>
        
<p>The original value can be returned by setting the optional 3<sup>rd</sup> parameter to "<span class="code">true</span>".</p>
    
<p>Properties are global to JMeter,
        so can be used to communicate between threads and thread groups</p>
    
</div>
<div class="properties">
<h3 id="__setProperty_parms1">
        Parameters
        <a class="sectionlink" href="#__setProperty_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Property Name</div>
<div class="description req-true">The property name to be set.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">Property Value</div>
<div class="description req-true">The value for the property.</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">True/False</div>
<div class="description req-false">Should the original value be returned?</div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>



<div class="component">
<h2 id="__time">__time<a class="sectionlink" href="#__time" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The time function returns the current time in various formats.</p>
    
</div>
<div class="properties">
<h3 id="__time_parms1">
        Parameters
        <a class="sectionlink" href="#__time_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Format</div>
<div class="description req-false">
        The format to be passed to <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat</a>.
        The function supports various shorthand aliases, see below.
        If omitted, the function returns the current time in milliseconds since the epoch.
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>If the format string is omitted, then the function returns the current time in milliseconds since the epoch.
If the format matches "<span class="code">/ddd</span>" (where <span class="code">ddd</span> are decimal digits),
then the function returns the current time in milliseconds divided by the value of <span class="code">ddd</span>.
For example, "<span class="code">/1000</span>" returns the current time in seconds since the epoch.
Otherwise, the current time is passed to SimpleDateFormat.
The following shorthand aliases are provided:
</p>
<ul>

<li>
<span class="code">YMD</span> = <span class="code">yyyyMMdd</span>
</li>

<li>
<span class="code">HMS</span> = <span class="code">HHmmss</span>
</li>

<li>
<span class="code">YMDHMS</span> = <span class="code">yyyyMMdd-HHmmss</span>
</li>

<li>
<span class="code">USER1</span> = whatever is in the JMeter property <span class="code">time.USER1</span>
</li>

<li>
<span class="code">USER2</span> = whatever is in the JMeter property <span class="code">time.USER2</span>
</li>

</ul>
<p>The defaults can be changed by setting the appropriate JMeter property, e.g.
<span class="code">time.YMD=yyMMdd</span>

</p>
<p>
<pre class="source">${__time(dd/MM/yyyy,)}</pre>  will return <span class="code">21/01/2018</span> if ran on 21 january 2018</p>
<p>
<pre class="source">${__time(YMD,)}</pre>  will return <span class="code">20180121</span> if ran on 21 january 2018</p>
<p>
<pre class="source">${__time()}</pre>  will return time in millis <span class="code">1516540541624</span>
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__jexl2">__jexl2<a class="sectionlink" href="#__jexl2" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The jexl function returns the result of evaluating a
    <a href="http://commons.apache.org/jexl">Commons JEXL expression</a>.
    See links below for more information on JEXL expressions.
    </p>
    
<p>The <span class="code">__jexl2</span> function uses Commons JEXL 2</p>
    
<ul>
    
<li>
<a href="http://commons.apache.org/proper/commons-jexl/reference/syntax.html">JEXL syntax description</a>
</li>
    
<li>
<a href="http://commons.apache.org/proper/commons-jexl/reference/examples.html#Example_Expressions">JEXL examples</a>
</li>
    
</ul>
    
</div>
<div class="properties">
<h3 id="__jexl2_parms1">
        Parameters
        <a class="sectionlink" href="#__jexl2_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Expression</div>
<div class="description req-true">
        The expression to be evaluated. For example, <span class="code">6*(5+2)</span>
        
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>
The following variables are made available to the script:
</p>
<ul>

<li>
<span class="code">log</span> - the <a href="https://www.slf4j.org/api/org/slf4j/Logger.html">Logger</a> for the function</li>

<li>
<span class="code">ctx</span> - <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object</li>

<li>
<span class="code">vars</span> - <a href="../api/org/apache/jmeter/threads/JMeterVariables.html">JMeterVariables</a> object</li>

<li>
<span class="code">props</span> - JMeterProperties (class <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html"><span class="code">java.util.Properties</span></a>) object</li>

<li>
<span class="code">threadName</span> - String containing the current thread name</li>

<li>
<span class="code">sampler</span> - current <a href="../api/org/apache/jmeter/samplers/Sampler.html">Sampler</a> object (if any)</li>

<li>
<span class="code">sampleResult</span> - previous <a href="../api/org/apache/jmeter/samplers/SampleResult.html">SampleResult</a> object (if any)</li>

<li>
<span class="code">OUT</span> - System.out - e.g. <span class="code">OUT.println("message")</span>
</li>

</ul>
<p>
    Jexl can also create classes and call methods on them, for example:
    </p>
<p>
    
<pre class="source">
Systemclass=log.class.forName("java.lang.System");
now=Systemclass.currentTimeMillis();
</pre>
    Note that the Jexl documentation on the web-site wrongly suggests that "<span class="code">div</span>" does integer division.
    In fact "<span class="code">div</span>" and "<span class="code">/</span>" both perform normal division. One can get the same effect
    as follows:
    <pre class="source">
i= 5 / 2;
i.intValue(); // or use i.longValue()
</pre>
    
</p>
<div class="clear"></div>
<div class="note">JMeter allows the expression to contain multiple statements.</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__jexl3">__jexl3<a class="sectionlink" href="#__jexl3" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The jexl function returns the result of evaluating a
    <a href="http://commons.apache.org/proper/commons-jexl/">Commons JEXL expression</a>.
    See links below for more information on JEXL expressions.
    </p>
    
<p>The <span class="code">__jexl3</span> function uses Commons JEXL 3</p>
    
<ul>
    
<li>
<a href="http://commons.apache.org/proper/commons-jexl/reference/syntax.html">JEXL syntax description</a>
</li>
    
<li>
<a href="http://commons.apache.org/proper/commons-jexl/reference/examples.html#Example_Expressions">JEXL examples</a>
</li>
    
</ul>
    
</div>
<div class="properties">
<h3 id="__jexl3_parms1">
        Parameters
        <a class="sectionlink" href="#__jexl3_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Expression</div>
<div class="description req-true">
        The expression to be evaluated. For example, <span class="code">6*(5+2)</span>
        
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>
The following variables are made available to the script:
</p>
<ul>

<li>
<span class="code">log</span> - the <a href="https://www.slf4j.org/api/org/slf4j/Logger.html">Logger</a> for the function</li>

<li>
<span class="code">ctx</span> - <a href="../api/org/apache/jmeter/threads/JMeterContext.html">JMeterContext</a> object</li>

<li>
<span class="code">vars</span> - <a href="../api/org/apache/jmeter/threads/JMeterVariables.html">JMeterVariables</a> object</li>

<li>
<span class="code">props</span> - JMeterProperties (class <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html"><span class="code">java.util.Properties</span></a>) object</li>

<li>
<span class="code">threadName</span> - String containing the current thread name</li>

<li>
<span class="code">sampler</span> - current <a href="../api/org/apache/jmeter/samplers/Sampler.html">Sampler</a> object (if any)</li>

<li>
<span class="code">sampleResult</span> - previous <a href="../api/org/apache/jmeter/samplers/SampleResult.html">SampleResult</a> object (if any)</li>

<li>
<span class="code">OUT</span> - System.out - e.g. <span class="code">OUT.println("message")</span>
</li>

</ul>
<p>
    Jexl can also create classes and call methods on them, for example:
    </p>
<p>
    
<pre class="source">
Systemclass=log.class.forName("java.lang.System");
now=Systemclass.currentTimeMillis();
</pre>
    Note that the Jexl documentation on the web-site wrongly suggests that "<span class="code">div</span>" does integer division.
    In fact "<span class="code">div</span>" and "<span class="code">/</span>" both perform normal division. One can get the same effect
    as follows:
    <pre class="source">
i= 5 / 2;
i.intValue(); // or use i.longValue()
</pre>
    
</p>
<div class="clear"></div>
<div class="note">JMeter allows the expression to contain multiple statements.</div>
<div class="clear"></div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__V">__V<a class="sectionlink" href="#__V" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The V (variable) function returns the result of evaluating a variable name expression.
    This can be used to evaluate nested variable references (which are not currently supported).
    </p>
    
<p>For example, if one has variables <span class="code">A1</span>,<span class="code">A2</span> and <span class="code">N</span>=<span class="code">1</span>:</p>
    
<ul>
    
<li>
<span class="code">${A1}</span> - works OK</li>
    
<li>
<span class="code">${A${N}}</span> - does not work (nested variable reference)</li>
    
<li>
<span class="code">${__V(A${N})}</span> - works OK. <span class="code">A${N}</span> becomes <span class="code">A1</span>, and the <span class="code">__V</span> function returns the value of <span class="code">A1</span>
</li>
    
</ul>
    
</div>
<div class="properties">
<h3 id="__V_parms1">
        Parameters
        <a class="sectionlink" href="#__V_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Variable name</div>
<div class="description req-true">
        The variable to be evaluated.
        </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Default value</div>
<div class="description req-false">
        The default value in case no variable found, if it's empty and no variable found function returns the variable name
        </div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__evalVar">__evalVar<a class="sectionlink" href="#__evalVar" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The evalVar function returns the result of evaluating an expression stored in a variable.
    </p>
    
<p>
    This allows one to read a string from a file, and process any variable references in it.
    For example, if the variable "<span class="code">query</span>" contains "<span class="code">select ${column} from ${table}</span>"
    and "<span class="code">column</span>" and "<span class="code">table</span>" contain "<span class="code">name</span>" and "<span class="code">customers</span>", then <span class="code">${__evalVar(query)}</span>
    will evaluate as "<span class="code">select name from customers</span>".
    </p>
    
</div>
<div class="properties">
<h3 id="__evalVar_parms1">
        Parameters
        <a class="sectionlink" href="#__evalVar_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Variable name</div>
<div class="description req-true">
        The variable to be evaluated.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__eval">__eval<a class="sectionlink" href="#__eval" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The eval function returns the result of evaluating a string expression.
    </p>
    
<p>
    This allows one to interpolate variable and function references in a string
    which is stored in a variable.    For example, given the following variables:
    </p>
    
<ul>
    
<li>
<span class="code">name</span>=<span class="code">Smith</span>
</li>
    
<li>
<span class="code">column</span>=<span class="code">age</span>
</li>
    
<li>
<span class="code">table</span>=<span class="code">birthdays</span>
</li>
    
<li>
<span class="code">SQL</span>=<span class="code">select ${column} from ${table} where name='${name}'</span>
</li>
    
</ul>
    then <span class="code">${__eval(${SQL})}</span> will evaluate as "<span class="code">select age from birthdays where name='Smith'</span>".

    <p>
    This can be used in conjunction with CSV Dataset, for example
    where the both SQL statements and the values are defined in the data file.
    </p>
    
</div>
<div class="properties">
<h3 id="__eval_parms1">
        Parameters
        <a class="sectionlink" href="#__eval_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Variable name</div>
<div class="description req-true">
        The variable to be evaluated.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__char">__char<a class="sectionlink" href="#__char" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The char function returns the result of evaluating a list of numbers as Unicode characters.
    See also <span class="code">__unescape()</span>, below.
    </p>
    
<p>
    This allows one to add arbitrary character values into fields.
    </p>
    
</div>
<div class="properties">
<h3 id="__char_parms1">
        Parameters
        <a class="sectionlink" href="#__char_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Unicode character number (decimal or 0xhex)</div>
<div class="description req-true">
        The decimal number (or hex number, if prefixed by <span class="code">0x</span>, or octal, if prefixed by <span class="code">0</span>) to be converted to a Unicode character.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<p>Examples:
<br>

<span class="code">${__char(13,10)}</span> = <span class="code">${__char(0xD,0xA)}</span> = <span class="code">${__char(015,012)}</span> = <span class="code">CRLF</span>

<br>

<span class="code">${__char(165)}</span> = <span class="code">&yen;</span> (yen)
 </p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__unescape">__unescape<a class="sectionlink" href="#__unescape" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The unescape function returns the result of evaluating a Java-escaped string. See also <span class="code">__char()</span> above.
    </p>
    
<p>
    This allows one to add characters to fields which are otherwise tricky (or impossible) to define via the GUI.
    </p>
    
</div>
<div class="properties">
<h3 id="__unescape_parms1">
        Parameters
        <a class="sectionlink" href="#__unescape_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to unescape</div>
<div class="description req-true">
        The string to be unescaped.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<p>Examples:
<br>

<span class="code">${__unescape(\r\n)}</span> = <span class="code">CRLF</span>

<br>

<span class="code">${__unescape(1\t2)}</span> = <span class="code">1</span>[tab]<span class="code">2</span>
 
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__unescapeHtml">__unescapeHtml<a class="sectionlink" href="#__unescapeHtml" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function to unescape a string containing HTML entity escapes
to a string containing the actual Unicode characters corresponding to the escapes.
Supports HTML 4.0 entities.
</p>

<p>
For example, the string <pre class="source">${__unescapeHtml(&amp;lt;Fran&amp;ccedil;ais&amp;gt;)}</pre>
will return <span class="code">&lt;Fran&ccedil;ais&gt;</span>.
</p>

<p>
If an entity is unrecognized, it is left alone, and inserted verbatim into the result string.
e.g. <span class="code">${__unescapeHtml(&amp;gt;&amp;zzzz;x)}</span> will return <span class="code">&gt;&amp;zzzz;x</span>.
</p>
    
<p>
    Uses <span class="code">StringEscapeUtils#unescapeHtml(String)</span> from Commons Lang.
    </p>
    
</div>
<div class="properties">
<h3 id="__unescapeHtml_parms1">
        Parameters
        <a class="sectionlink" href="#__unescapeHtml_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to unescape</div>
<div class="description req-true">
        The string to be unescaped.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__escapeHtml">__escapeHtml<a class="sectionlink" href="#__escapeHtml" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function which escapes the characters in a String using HTML entities.
Supports HTML 4.0 entities.
</p>

<p>
For example,<pre class="source">${__escapeHtml("bread" &amp; "butter")}</pre>
return:
<span class="code">&amp;quot;bread&amp;quot; &amp;amp; &amp;quot;butter&amp;quot;</span>.
</p>
    
<p>
    Uses <span class="code">StringEscapeUtils#escapeHtml(String)</span> from Commons Lang.
    </p>
    
</div>
<div class="properties">
<h3 id="__escapeHtml_parms1">
        Parameters
        <a class="sectionlink" href="#__escapeHtml_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to escape</div>
<div class="description req-true">
        The string to be escaped.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__urldecode">__urldecode<a class="sectionlink" href="#__urldecode" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function to decode a <span class="code">application/x-www-form-urlencoded</span> string.
Note: use UTF-8 as the encoding scheme.
</p>

<p>
For example, the string <pre class="source">${__urldecode(Word+%22school%22+is+%22%C3%A9cole%22+in+french)}</pre> returns
 <span class="code">Word "school" is "&eacute;cole" in french</span>.
</p>
    
<p>
    Uses Java class <a href="http://docs.oracle.com/javase/7/docs/api/java/net/URLDecoder.html">URLDecoder</a>.
    </p>
    
</div>
<div class="properties">
<h3 id="__urldecode_parms1">
        Parameters
        <a class="sectionlink" href="#__urldecode_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to decode</div>
<div class="description req-true">
        The string with URL encoded chars to decode.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__urlencode">__urlencode<a class="sectionlink" href="#__urlencode" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function to encode a string to a <span class="code">application/x-www-form-urlencoded</span> string.
</p>

<p>
For example, the string <pre class="source">${__urlencode(Word "school" is "&eacute;cole" in french)}</pre> returns
 <span class="code">Word+%22school%22+is+%22%C3%A9cole%22+in+french</span>.
</p>
    
<p>
    Uses Java class <a href="http://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html">URLEncoder</a>.
    </p>
    
</div>
<div class="properties">
<h3 id="__urlencode_parms1">
        Parameters
        <a class="sectionlink" href="#__urlencode_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to encode</div>
<div class="description req-true">
        String to encode in URL encoded chars.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__FileToString">__FileToString<a class="sectionlink" href="#__FileToString" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The FileToString function can be used to read an entire file.
    Each time it is called it reads the entire file.
    </p>
    
<p>If an error occurs opening or reading the file, then the function returns the string "<span class="code">**ERR**</span>"</p>

</div>
<div class="properties">
<h3 id="__FileToString_parms1">
        Parameters
        <a class="sectionlink" href="#__FileToString_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">File Name</div>
<div class="description req-true">Path to the file name.
            (The path can be relative to the JMeter launch directory)
        </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">File encoding if not the platform default</div>
<div class="description req-false">
        The encoding to be used to read the file. If not specified, the platform default is used.
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">
A reference name - <span class="code">refName</span> - for reusing the value created by this function. Stored values are of the form <span class="code">${refName}</span>.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<p>The file name, encoding and reference name parameters are resolved every time the function is executed.</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__samplerName">__samplerName<a class="sectionlink" href="#__samplerName" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The samplerName function returns the name (i.e. label) of the current sampler.
    </p>
    
<p>
    The function does not work in Test elements that don't have an associated sampler.
    For example the Test Plan.
    Configuration elements also don't have an associated sampler.
    However some Configuration elements are referenced directly by samplers, such as the HTTP Header Manager
    and Http Cookie Manager, and in this case the functions are resolved in the context of the Http Sampler.
    Pre-Processors, Post-Processors and Assertions always have an associated Sampler.
    </p>
    
<p>Example: <pre class="source">${__samplerName()}</pre>
</p>

</div>
<div class="properties">
<h3 id="__samplerName_parms1">
        Parameters
        <a class="sectionlink" href="#__samplerName_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">
A reference name - <span class="code">refName</span> - for reusing the value created by this function. Stored values are of the form <span class="code">${refName}</span>.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__TestPlanName">__TestPlanName<a class="sectionlink" href="#__TestPlanName" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The TestPlanName function returns the name of the current test plan (can be used in Including Plans to know the name of the calling test plan).
    </p>

</div>
<p>Example:
<pre class="source">${__TestPlanName}</pre> will return the file name of your test plan, for example if plan is in a file named Demo.jmx, it will return "<span class="code">Demo.jmx</span>
<br>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__escapeOroRegexpChars">__escapeOroRegexpChars<a class="sectionlink" href="#__escapeOroRegexpChars" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function which escapes the ORO Regexp meta characters, it is the equivalent of <span class="code">\Q</span> <span class="code">\E</span> in Java Regexp Engine.
</p>

<p>
For example,<pre class="source">${__escapeOroRegexpChars([^"].+?,)}</pre>
returns:
<span class="code">\[\^\"\]\.\+\?</span>.
</p>
    
<p>
    Uses Perl5Compiler#quotemeta(String) from ORO.
    </p>
    
</div>
<div class="properties">
<h3 id="__escapeOroRegexpChars_parms1">
        Parameters
        <a class="sectionlink" href="#__escapeOroRegexpChars_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to escape</div>
<div class="description req-true">
        The string to be escaped.
        </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Variable Name</div>
<div class="description req-false">
A reference name - <span class="code">refName</span> - for reusing the value created by this function. Stored values are of the form <span class="code">${refName}</span>.
        </div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__escapeXml">__escapeXml<a class="sectionlink" href="#__escapeXml" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
Function which escapes the characters in a String using XML 1.0 entities.
</p>

<p>
For example,<pre class="source">${__escapeXml("bread" &amp; 'butter')}</pre>
returns:
<span class="code">&amp;quot;bread&amp;quot; &amp;amp; &amp;apos;butter&amp;apos;</span>.
</p>
    
<p>
    Uses <span class="code">StringEscapeUtils#escapeXml10(String)</span> from Commons Lang.
    </p>
    
</div>
<div class="properties">
<h3 id="__escapeXml_parms1">
        Parameters
        <a class="sectionlink" href="#__escapeXml_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">String to escape</div>
<div class="description req-true">
        The string to be escaped.
        </div>
<div class="required req-true">Yes</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>



<div class="component">
<h2 id="__timeShift">__timeShift<a class="sectionlink" href="#__timeShift" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>The timeShift function returns a date in the given format with the specified amount of seconds, minutes, hours, days or months added</p>
    
</div>
<div class="properties">
<h3 id="__timeShift_parms1">
        Parameters
        <a class="sectionlink" href="#__timeShift_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-false">Format</div>
<div class="description req-false">
        The format to be passed to DateTimeFormatter.
        See <a href="https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html">DateTimeFormatter</a>
        If omitted, the function uses milliseconds since epoch format.
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Date to shift</div>
<div class="description req-false">
        Indicate the date in the format set by the parameter 'Format' to shift
        If omitted, the date is set to now
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">value to shift</div>
<div class="description req-false">
        Indicate the specified amount of seconds, minutes, hours or days to shift according to a textual representation of a duration such as PnDTnHnMn.nS. See https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-
        <ul>
        
<li>
<span class="code">PT20.345S</span> parses as 20.345 seconds</li>
        
<li>
<span class="code">PT15M</span> parses as 15 minutes</li>
        
<li>
<span class="code">PT10H</span> parses as 10 hours</li>
        
<li>
<span class="code">P2D</span> parses as 2 days</li>
        
<li>
<span class="code">-P6H3M</span> parses as -6 hours and -3 minutes</li>
        
</ul>
        
</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Locale to use for format</div>
<div class="description req-false">
        The string format of a locale. The language code must be lowercase. The country code must be uppercase. The separator must be an underscore. ex: en_EN
        See http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html
        If omitted, by default the function use the ApacheJMeter locale one.
        </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>

</div>
<p>Examples:
<pre class="source">${__timeShift(dd/MM/yyyy,21/01/2018,P2D,,)}</pre> returns <span class="code">23/01/2018</span>

<pre class="source">${__timeShift(dd MMMM yyyy,21 f&eacute;vrier 2018,P2D,fr_FR,)}</pre> returns <span class="code">23 f&eacute;vrier 2018</span>

</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__digest">__digest<a class="sectionlink" href="#__digest" title="Link to here">&para;</a>
</h2>
<div class="description">
        
<p>The digest function returns an encrypted value in the
            specific hash algorithm with the optional salt, upper case
            and variable name.</p>
    
</div>
<div class="properties">
<h3 id="__digest_parms1">
        Parameters
        <a class="sectionlink" href="#__digest_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Algorithm</div>
<div class="description req-true">
            The algorithm to be used to encrypt
            For possible algorithms See MessageDigest in
            <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html">StandardNames</a>
            
<ul>
                
<li>MD2</li>
                
<li>MD5</li>
                
<li>SHA-1</li>
                
<li>SHA-224</li>
                
<li>SHA-256</li>
                
<li>SHA-384</li>
                
<li>SHA-512</li>
            
</ul>
            
<div class="clear"></div>
<div class="note">Spaces are taken into account for <span class="code">Salt to add</span> and <span class="code">String to encode</span>
</div>
<div class="clear"></div>
        
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">String to encode</div>
<div class="description req-true"> The String
            that will be encrypted </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Salt to add</div>
<div class="description req-false"> Salt to be added
            to string (after it)</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Upper Case value</div>
<div class="description req-false"> Result will
            be in lower case by default. Choose true to upper case
            results. </div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of
            the variable to set.</div>
<div class="required req-false">No</div>
</div>
    
</div>
<p>Examples:
        <pre class="source">${__digest(MD5,Errare humanum est,,,)}</pre> returns <span class="code">c49f00b92667a35c63708933384dad52</span>
<br>
        
<pre class="source">${__digest(SHA-256,Felix qui potuit rerum cognoscere causas,mysalt,,)}</pre> returns <span class="code">a3bc6900fe2b2fc5fa8a601a4a84e27a079bf2c581d485009bc5c00516729ac7</span>
<br>

    
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__dateTimeConvert">__dateTimeConvert<a class="sectionlink" href="#__dateTimeConvert" title="Link to here">&para;</a>
</h2>
<div class="description">
        
<p>The <span class="code">__dateTimeConvert</span> function converts a date that is in source format
        to a target format storing the result optionally in the variable name.</p>
    
</div>
<div class="properties">
<h3 id="__dateTimeConvert_parms1">
        Parameters
        <a class="sectionlink" href="#__dateTimeConvert_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Date String</div>
<div class="description req-true">
            The date string to convert from Source Date Format to Target Date Format. A date as a epoch time could be use here if Source Date Format is empty.
        </div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Source Date Format</div>
<div class="description req-false">The original date format. If empty, the Date String field must be a epoch time.</div>
<div class="required req-false">No</div>
</div>
        
<div class="property">
<div class="name req-true">Target Date Format</div>
<div class="description req-true">The new date format</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>
    
</div>
<p>Example:
    <pre class="source">${__dateTimeConvert(01212018,MMddyyyy,dd/MM/yyyy,)}</pre> returns <span class="code">21/01/2018</span>
    
</p>
<p>
    With epoch time value: 1526574881000, <pre class="source">${__dateTimeConvert(1526574881000,,dd/MM/yyyy HH:mm,)}</pre> returns <span class="code">17/05/2018 16:34</span> in UTC time(-Duser.timezone=GMT)
    </p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__isPropDefined">__isPropDefined<a class="sectionlink" href="#__isPropDefined" title="Link to here">&para;</a>
</h2>
<div class="description">
        
<p>The <span class="code">__isPropDefined</span> function returns true if property exists or false if not.</p>
    
</div>
<div class="properties">
<h3 id="__isPropDefined_parms1">
        Parameters
        <a class="sectionlink" href="#__isPropDefined_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Property Name</div>
<div class="description req-true">
            The Property Name to be used to check if defined
        </div>
<div class="required req-true">Yes</div>
</div>
    
</div>
<p>Example: <pre class="source">${__isPropDefined(START.HMS)}</pre> will return <span class="code">true</span>
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__isVarDefined">__isVarDefined<a class="sectionlink" href="#__isVarDefined" title="Link to here">&para;</a>
</h2>
<div class="description">
        
<p>The <span class="code">__isVarDefined</span> function returns true if variable exists or false if not.</p>
    
</div>
<div class="properties">
<h3 id="__isVarDefined_parms1">
        Parameters
        <a class="sectionlink" href="#__isVarDefined_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
        
<div class="property">
<div class="name req-true">Variable Name</div>
<div class="description req-true">
            The Variable Name to be used to check if defined
        </div>
<div class="required req-true">Yes</div>
</div>
    
</div>
<p>Example: <pre class="source">${__isVarDefined(JMeterThread.last_sample_ok)}</pre> will return <span class="code">true</span>
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>

<div class="component">
<h2 id="__changeCase">__changeCase<a class="sectionlink" href="#__changeCase" title="Link to here">&para;</a>
</h2>
<div class="description">
        
<p>The change case function returns a string value which
        case has been changed following a specific mode.
        Result can optionally be saved in a JMeter variable.</p>
    
</div>
<div class="properties">
<h3 id="__changeCase_parms1">
        Parameters
        <a class="sectionlink" href="#__changeCase_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
    
<div class="property">
<div class="name req-true">String to change case</div>
<div class="description req-true">The String
            which case will be changed</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-true">change case mode</div>
<div class="description req-true">
            The mode to be used to change case, for example for <span class="code">ab-CD eF</span>:
            <ul>
                
<li>
<span class="code">UPPER</span> result as AB-CD EF</li>
                
<li>
<span class="code">LOWER</span> result as ab-cd ed</li>
                
<li>
<span class="code">CAPITALIZE</span> result as Ab-CD eF</li>
            
</ul>
            
<div class="clear"></div>
<div class="note">
<span class="code">change case mode</span> is case insensitive</div>
<div class="clear"></div>
        
</div>
<div class="required req-true">Yes</div>
</div>
        
<div class="property">
<div class="name req-false">Name of variable</div>
<div class="description req-false">The name of the variable to set.</div>
<div class="required req-false">No</div>
</div>
    
</div>
<p>Examples:
    <pre class="source">${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}</pre> will return <span class="code">AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHIL</span>
    
<pre class="source">${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}</pre> will return <span class="code">labor omnia vincit improbus</span>
    
<pre class="source">${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}</pre> will return <span class="code">Omnibus viis romam pervenitur</span>
    
</p>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


<div class="component">
<h2 id="__StringToFile">__StringToFile<a class="sectionlink" href="#__StringToFile" title="Link to here">&para;</a>
</h2>
<div class="description">
    
<p>
    The <span class="code">__StringToFile</span> function can be used to write a string to a file.
    Each time it is called it writes a string to file appending or overwriting.
    </p>
    
<p>The default return value from the function is the empty string</p>

</div>
<div class="properties">
<h3 id="__StringToFile_parms1">
        Parameters
        <a class="sectionlink" href="#__StringToFile_parms1" title="Link to here">&para;</a>
</h3>
<div class="property title">
<div class="name title">Attribute</div>
<div class="description title">Description</div>
<div class="required title">Required</div>
</div>
    
<div class="property">
<div class="name req-true">Path to file</div>
<div class="description req-true">
    Path to the file name.(The path is absolute)
    </div>
<div class="required req-true">Yes</div>
</div>
    
<div class="property">
<div class="name req-true">String to write</div>
<div class="description req-true">
    The string to write to the file. <br>
    If you need to insert a line break in your content, use <span class="code">\n</span> in your string.
    </div>
<div class="required req-true">Yes</div>
</div>
    
<div class="property">
<div class="name req-false">Append to file?</div>
<div class="description req-false">
    The way to write the string, <span class="code">true</span> means append, <span class="code">false</span>
    means overwrite.
    </div>
<div class="required req-false">No</div>
</div>
    
<div class="property">
<div class="name req-false">File encoding if not UTF-8</div>
<div class="description req-false">
    The encoding to be used to write to the file. If not specified, the default encoding is <span class="code">UTF-8</span>.
    </div>
<div class="required req-false">No</div>
</div>

</div>
<div class="go-top">
<a href="#">^</a>
</div>
</div>


</div>


<div class="subsection">
<h2 id="predefinedvars">20.6 Pre-defined Variables<a class="sectionlink" href="#predefinedvars" title="Link to here">&para;</a>
</h2>

<p>
Most variables are set by calling functions or by test elements such as User Defined Variables;
in which case the user has full control over the variable name that is used.
However some variables are defined internally by JMeter. These are listed below.
</p>

<ul>

<li>
<span class="code">COOKIE_cookiename</span> - contains the cookie value (see <a href="../usermanual/component_reference.html#HTTP_Cookie_Manager">HTTP Cookie Manager</a>)</li>

<li>
<span class="code">JMeterThread.last_sample_ok</span> - whether or not the last sample was OK - <span class="code">true</span>/<span class="code">false</span>.
Note: this is updated after PostProcessors and Assertions have been run.
</li>

<li>
<span class="code">START</span> variables (see next section)</li>

</ul>

</div>

<div class="subsection">
<h2 id="predefinedprops">20.6 Pre-defined Properties<a class="sectionlink" href="#predefinedprops" title="Link to here">&para;</a>
</h2>

<p>
The set of JMeter properties is initialised from the system properties defined when JMeter starts;
additional JMeter properties are defined in <span class="code">jmeter.properties</span>, <span class="code">user.properties</span> or on the command line.
</p>

<p>
Some built-in properties are defined by JMeter. These are listed below.
For convenience, the <span class="code">START</span> properties are also copied to variables with the same names.
</p>

<ul>

<li>
<span class="code">START.MS</span> - JMeter start time in milliseconds</li>

<li>
<span class="code">START.YMD</span> - JMeter start time as <span class="code">yyyyMMdd</span>
</li>

<li>
<span class="code">START.HMS</span> - JMeter start time as <span class="code">HHmmss</span>
</li>

<li>
<span class="code">TESTSTART.MS</span> - test start time in milliseconds</li>

</ul>

<p>
Please note that the <span class="code">START</span> variables / properties represent JMeter startup time, not the test start time.
They are mainly intended for use in file names etc.
</p>

</div>

</div>
<ul class="pagelinks">
<li>
<a href="properties_reference.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="regular_expressions.html">Next &gt;</a>
</li>
</ul>
<div class="share-links">
      Share this page:
      <ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2019
            , Apache Software Foundation
          </div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
</div>
<script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
</body>
</html>
