<!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 an Apache 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 whether 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 whether 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 whether 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">An Apache 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. If not specified, the default append is <span class="code">true</span>.
    </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;
            2020
            , 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>
