> OctoPerf load testing - Functions usage documentation page. How to use JMeter functions in OctoPerf. Plus examples like URL encoding.

Source: https://api.octoperf.com/doc/design/edit-virtual-user/functions/

# Functions Usage

Since OctoPerf operates [JMeter](https://jmeter.apache.org/) in the background, it is also possible to use [JMeter functions](https://jmeter.apache.org/usermanual/functions.html).
Functions are shortcuts you can use to avoid adding a script block into your virtual user.
The same result can be achieved programmatically but they make life easier by handling a lof of common situations.

!!! note
    The function name will be replaced by its output upon runtime in the same way a variable would be. Some functions do not output anything, refer to the function documentation for more details.

!!! warning
    Functions require computation that can in turn make your virtual users slow, make sure to use them sparingly.

## Information

### __threadNum

This function outputs the thread (= virtual user) number. The number is between 1 and the max number of running threads. This value is not unique. 

Typically In OctoPerf, every runtime group (and load generator in case a runtime group has more than one) will count thread numbers independently.

If you are looking for a unique value per thread, combine this with [machineName](#__machinename).

!!! example
    `${__threadNum}`

### __iterationNum

This function returns the current iteration number for the virtual user. The iteration number indicates how many times the virtual user was able to execute all its actions starting at 1.

!!! example
    `${__iterationNum}`

### __threadGroupName

This function returns the name of the virtual user as specified on the design screen.


!!! example
    `${__threadGroupName}`

### __samplerName

This function returns the name of the current sampler. For example it can output the name of the HTTP request being executed.

!!! warning
    This function only works when used from inside a sampler, post/pre processor or assertion.

!!! example
    `${__samplerName()}`

The output can be saved into a variable in order to be reused later:

!!! example
    `${__samplerName(myvar)}`
    `${myvar}`


### __machineIP

This function returns the local machine IP. In OctoPerf, the output will always be `172.17.0.2 ` since this is the local address of the docker container.

!!! example
    `${__machineIP}`

### __machineName

This function returns the local machine name. In OctoPerf, the output will be the local docker container Id, a string of 12 random characters that is unique to each docker container. As such this function can be used to keep track of each individual thread when combined with [threadNum](#__threadnum) and [iterationNum](#__iterationnum)

!!! example
    `${__machineName}`

### __TestPlanName

This function returns the test plan name. In OctoPerf, the output will always be `scenario.jmx` since this is how we name all test plans.

!!! example
    `${__TestPlanName}`

### __log

This function logs a message and returns its input string.

| Attribute           | Description                                                  | Required |
| ------------------- | ------------------------------------------------------------ | -------- |
| String to be logged | The string you want to log                                   | Yes      |
| Log level           | **OUT**, **ERR**, **DEBUG**, **INFO** (default), **WARN** or **ERROR** | No       |
| Throwable text      | Creates a Throwable to pass to the logger                    | No       |
| Comment             | Displayed in the string. Useful to identify what is being logged. | No       |

!!! example
    Simple log message
    === "Function"
        ${__log(Message)}

    === "Output"
        INFO o.a.j.f.LogFunction2: 4Td6qXoBxyeK1U3VyivI 1-1  :  Message
    
    Log message using a variable (${myvar} = value)
    
    === "Function"
        \${__log(\${myvar},,,myvar=)}
    
    === "Output"
        INFO o.a.j.f.LogFunction2: 4Td6qXoBxyeK1U3VyivI 1-1  :  myvar= value

### __logn

This function logs a message but returns an empty string. It works the same way than [log](#__log) but can be used from anywhere since it has no output. 

| Attribute           | Description                                                  | Required |
| ------------------- | ------------------------------------------------------------ | -------- |
| String to be logged | The string you want to log                                   | Yes      |
| Log level           | **OUT**, **ERR**, **DEBUG**, **INFO** (default), **WARN** or **ERROR** | No       |
| Throwable text      | Creates a Throwable to pass to the logger                    | No       |

!!! example
    Simple log message
    === "Function"
        ${__logn(Message)}

    === "Output"
        INFO o.a.j.f.LogFunction2: 4Td6qXoBxyeK1U3VyivI 1-1  :  Message
    
    Log message using a variable (${myvar} = value)
    
    === "Function"
        \${__logn(myvar=\${myvar})}
    
    === "Output"
        INFO o.a.j.f.LogFunction2: 4Td6qXoBxyeK1U3VyivI 1-1  :  myvar=value

## File

### __StringFromFile

This function returns a string from a file. Every time it is called it reads the next line. All virtual users running on the same OctoPerf load generator share access to this file, so they are guaranteed to get a different line, provided there are enough lines.  

| Attribute             | Description                                                  | Required |
| --------------------- | ------------------------------------------------------------ | -------- |
| File name             | Path to the file, relative to the JMeter folder. If provided through the files menu of OctoPerf, it will be located in `resources/`. | Yes      |
| Variable name         | Variable in which the value will be stored for later use.    | No       |
| Start sequence number | In case of multiple files specify the starting sequence number. | No       |
| End sequence number   | Final sequence number. If omitted there is no limit.         | No       |

!!! warning
    Multiple calls to this function will open the file independently and might result in different values being used. If you need to reuse the value, make sure to save it to a variable.

!!! example
    Read from multiple files
    === "Function"
        ${__StringFromFile(resources/file#'.'log,,1,2)}

    === "File read"
        file1.log, file2.log
    
    Read the same file twice
    === "Function"
        ${__StringFromFile(resources/file.log,,,2)}
    
    === "File read"
        file.log is read twice

### __FileToString

This function returns the content of an entire file as a string. Every time it is called it reads the entire file.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| File name     | Path to the file, relative to the JMeter folder. If provided through the files menu of OctoPerf, it will be located in `resources/`. | Yes      |
| File encoding | Default encoding is `iso 8859-1`, use this option to change it for instance to `UTF-8` | No       |
| Variable name | Variable in which the value will be stored for later use.    | No       |

!!! example
    `${__FileToString(resources/file.log,UTF-8)}`

### __XPath

This function returns the result of an XPath expression applied on an XML file. Upon each call to the function, the next available match will be returned, at the end of the file it loops back to the start. If there is no match an empty string is returned.

Since this works similarly to the [XPath processor](https://api.octoperf.com/doc/design/edit-virtual-user/action-types/post-processors/xpath2-variable-extractor/), we recommend to use it instead because it is natively integrated in OctoPerf's UI.

| Attribute | Description                                                  | Required |
| --------- | ------------------------------------------------------------ | -------- |
| File name | Path to the file, relative to the JMeter folder. If provided through the files menu of OctoPerf, it will be located in `resources/`. | Yes      |
| XPath     | Default encoding is `iso 8859-1`, use this option to change it for instance to `UTF-8` | Yes      |

!!! warning
    This function will load the entire file in memory in order to apply the XPath expression. On large files this can lead to huge memory consumption.

!!! example
    `${__XPath(resources/file.xml, //target/@name)}`

### __StringToFile

This function appends or overwrites a file with a string.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| File name     | Path to the file, relative to the JMeter folder. If provided through the files menu of OctoPerf, it will be located in `resources/`. | Yes      |
| String        | The string to write.                                         | Yes      |
| Append?       | **TRUE** to append the string at the end of the file, **FALSE** to overwrite the content of the file. Defaults to **TRUE** | No       |
| File encoding | Default encoding is `iso 8859-1`, use this option to change it for instance to `UTF-8` | No       |

!!! example
    `${__StringToFile(resources/file.log,message)}`

### __CSVRead

This function reads columns from a CSV file. Compared to [__StringFromFile](#__stringfromfile) it allows you to pick the right comma separated values instead of a whole line. Since the [CSV variable](https://api.octoperf.com/doc/design/edit-virtual-user/configuration/variables/csv/) already does this in a more efficient way, we strongly recommend using it instead.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| File name     | Path to the file, relative to the JMeter folder. If provided through the files menu of OctoPerf, it will be located in `resources/`. | Yes      |
| Column number | Column number starting from **0**. Use **NEXT** to skip to the next line and return an empty string. | Yes      |

!!! example
    `${__CSVRead(path/name.csv,0)}`
    Check out our more advanced example on the [CSV variable page](https://api.octoperf.com/doc/design/edit-virtual-user/configuration/variables/csv/#csvread) for more details.

## Time

### __time

This function returns the current time in various formats.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Format        | The date output format, see [DateTimeFormatter documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more details. | Yes      |
| Variable name | Variable in which the value will be stored for later use.    | No       |

Some examples with the current date `2021-02-10 13:31:16` :

| Time | Result |
| --- | --- |
| `${__time()}` | `1612960276007` |
| `${__time(/1000)}` | `1612960276` |
| `${__time(y-MM-dd HH:mm:ss)}` | `2021-02-10 13:31:16` |
| `${__time(YMD)}` | `20210210` |
| `${__time(Y-M-D--H:M:S)}` | `2021-02-10--14:32:16` |

### __timeshift

The Timeshift function can generate date and times as well but is mostly used to place an offset on a date.

| Attribute | Description |
| --- | --- |
| Format | The date output format, see [DateTimeFormatter documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more details. |
| Date to shift | The date you want to shift using *Format* set in first attribute. If empty, current date is used instead. |
| Shift value | Indicates the amount of time to shift. The format is `PnDTnHnMn.nS` it can be preceded by a `-` for negative date shifts. More info can be found [in the documentation](https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-). |
| Locale to use for format | The string format of a locale. See the [locale documentation](http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html) for more info. If empty, the function will default to`en_EN`. |
| Variable name            | Variable in which the value will be stored for later use. |

!!! warning
    Contrary to what Oracle's documentation may suggest, to use negative date increments for time intervals of an hour or less, it is mandatory to use PT instead of just P. Ex: `-PT1H`.

Some examples with the current date `2021-02-10 13:31:16` :

| Timeshift | Result |
| --- | --- |
| `${__timeShift(,,,,)}` | `1612960276007` |
| `${__timeShift(dd/MM/yyyy,,,,)}` | `10/02/2021` |
| `${__timeShift(y-MM-dd HH:mm:ss,,,,)}` | `2021-02-10 13:31:16` |
| `${__timeShift(dd/MM/yyyy,,P1D,,)}` | `11/02/2021` |
| `${__timeShift(dd-MM-y-HH-mm-ss,,P1DT1H1M,,)}` | `11-02-2021-14-32-16` |
| `${__timeShift(dd-MM-y-HH-mm-ss,,-PT1H,,)}` | `10-02-2021-12-31-16` |
| `${__timeShift(y MMM dd HH:mm:ss,,,fr_FR,)}` | `2021 févr. 10 13:31:16` |

### __dateTimeConvert

This function returns a date converted from its source format to a destination format of your choice.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Date string   | The date string to convert.                                  | Yes      |
| Source format | The **Date string** format, if omitted it must be an [epoch](https://en.wikipedia.org/wiki/Epoch_(computing)). | No       |
| Target format | The destination format, see [DateTimeFormatter documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more details. | Yes      |
| Variable name | Variable in which the value will be stored for later use.    | No       |

!!! example
    `${__dateTimeConvert(2021-02-10,yyyy-MM-dd,dd/MM/yyyy)}` outputs `10/02/2021`

## Compute

### __Counter

This function returns an incrementing integer. The value is incremented every time a virtual user finishes its iteration. Calling this function several times within the same iteration will yeld the same value.

Depending on your use case, you might have better control on the counter through the [Counter variable](https://api.octoperf.com/doc/design/edit-virtual-user/configuration/variables/counter/).

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Local?        | **TRUE** means the counter is local to the current thread/Virtual user only. **FALSE** means it will increment with every thread/Virtual user running inside the same OctoPerf container. | Yes      |
| Variable name | Variable in which the value will be stored for later use.    | No       |

!!! example
    `${__counter(TRUE,count)}`

### __digest

This function returns an encrypted value based on the hash, salt and other parameters.

| Attribute        | Description                                                  | Required |
| ---------------- | ------------------------------------------------------------ | -------- |
| Algorithm        | **MD2**, **MD5**, **SHA-1**, SHA-224, **SHA-256**, **SHA-384** or **SHA-512**. For more details check [StandardNames](https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html). | Yes      |
| String to encode | The value that will be encrypted.                            | Yes      |
| Salt             | [Salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) to be added after the string. | No       |
| Upper Case       | Results will be lowercase, use **TRUE** to uppercase results. | No       |
| Variable name    | Variable in which the value will be stored for later use.    | No       |

!!! example
    `${__digest(SHA-512,This is a value to encrypt,salt,,)}`

### __intSum

This function returns the sum of two or more integer values.

| Attribute      | Description                                                  | Required |
| -------------- | ------------------------------------------------------------ | -------- |
| First integer  | The first integer to add.                                    | Yes      |
| Second integer | Second integer to add.                                       | Yes      |
| Nth integer    | Nth integer to add.                                          | No       |
| Variable name  | Variable in which the value will be stored for later use. Must contain at least one non-integer char. | No       |

!!! example
    `${__intSum(14,6,22,myvar)}`

### __longSum

This function returns the sum of two or more long values. Use this when [__intSum](#__intsum) isn't enough.

| Attribute      | Description                                                  | Required |
| -------------- | ------------------------------------------------------------ | -------- |
| First integer  | The first long to add.                                       | Yes      |
| Second integer | Second long to add.                                          | Yes      |
| Nth integer    | Nth long to add.                                             | No       |
| Variable name  | Variable in which the value will be stored for later use. Must contain at least one non-integer char. | No       |

!!! example
    `${__longSum(14,6,22,myvar)}`

### __doubleSum

This function returns the sum of two or more floating values.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| First value   | The first double to add.                                     | Yes      |
| Second value  | Second double to add.                                        | Yes      |
| Nth value     | Nth double to add.                                           | No       |
| Variable name | Variable in which the value will be stored for later use. Must contain at least one non-float char. | No       |

!!! example
    `${__doubleSum(14.2,5.7,22.1,myvar)}`

### __Random

This function returns a random value between min and max.

| Attribute     | Description                                               | Required |
| ------------- | --------------------------------------------------------- | -------- |
| Min           | Minimum value.                                            | Yes      |
| Max           | Maximum value.                                            | Yes      |
| Variable name | Variable in which the value will be stored for later use. | No       |

!!! example
    `${__Random(0,10, variable)}`

### __RandomDate

This function returns a random date between the start and end date.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Format        | The date output format, see [DateTimeFormatter documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more details. | No       |
| Start         | Start date, default is *now*.                                | No       |
| End           | End date.                                                    | Yes      |
| Locale        | The locale to be used. See [locale list](https://www.oracle.com/java/technologies/javase7locales.html) for more details. Default is **en_EN**. | No       |
| Variable name | Variable in which the value will be stored for later use.    | No       |

!!! example
    `${__RandomDate(,,2025-12-31)}`
    `${__RandomDate(yyyy MM dd,,31 12 2025,,variable)}`

### __RandomFromMultipleVars

This function returns a random value based on all the variables provided.

| Attribute        | Description                                               | Required |
| ---------------- | --------------------------------------------------------- | -------- |
| Source variables | Pipe separated list of variables names.                   | Yes      |
| Variable name    | Variable in which the value will be stored for later use. | No       |

!!! example
    `${__RandomFromMultipleVars(variable1|variable2)}`

### __RandomString

This function returns a random string.

| Attribute     | Description                                               | Required |
| ------------- | --------------------------------------------------------- | -------- |
| Length        | Length of the random string.                              | Yes      |
| Allowed chars | List of allowed characters.                               | No       |
| Variable name | Variable in which the value will be stored for later use. | No       |

!!! example
    `${__RandomString(6,a12zeczclk, MYVAR)}`

### __chooseRandom

This function returns a random value picked among its arguments. The last argument must be the variable name in which the random value is stored.

| Attribute     | Description                                               | Required |
| ------------- | --------------------------------------------------------- | -------- |
| 1st value     | First random candidate.                                   | Yes      |
| 2nd value     | Second random candidate.                                  | No       |
| Nth value     | Nth random candidate.                                     | No       |
| Variable name | Variable in which the value will be stored for later use. | Yes      |

!!! example
    `${__chooseRandom(red,green,blue,orange,violet,magenta,randomColor)}`

### __UUID

This function returns a random [Universally Unique IDentifier](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format).

!!! example
    `${__UUID}`

### __if

This function returns two different values depending on the comparison of its two first arguments.

| Attribute       | Description                                                | Required |
| --------------- | ---------------------------------------------------------- | -------- |
| Actual value    | Value to be compared.                                      | Yes      |
| Expected value  | Value to compare with.                                     | Yes      |
| Return if true  | Value returned if comparison is ==                         | Yes      |
| Return if false | Value to return if comparison is !=                        | Yes      |
| Variable name   | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__if(${number}, 5, ok, invalid)}`

## Properties

### __isPropDefined

This function returns **TRUE** if the property exists or **FALSE** if it doesn't.

!!! example
    `${__isPropDefined(TESTSTART.MS)}`

### __property

This function returns the value of a property. The shorter __P function can also be used, although it can't be stored into a variable (2nd attribute is default value instead).

Properties are values shared among all users running inside the same OctoPerf container. This can be used in combination with the runtime properties to [control your scripts in real time](https://api.octoperf.com/doc/analysis/edit-bench-report/runtime-properties/#controlling-hit-rate) while the test is running.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| Name          | Name of the property to fetch.                             | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |
| Default value | If the property doesn't exist, return this value instead.  | No       |

!!! example
    `${__property(propertyName,myvar)}`
    
    `${__P(propertyName)}`

### __setProperty

This function returns the value to be set or an empty string. It can be used to update the value of a property.

| Attribute | Description                                                  | Required |
| --------- | ------------------------------------------------------------ | -------- |
| Name      | Override or create a property with this name.                | Yes      |
| Value     | Value to set.                                                | Yes      |
| Return    | **TRUE** if the value should be returned as well, defaults to **FALSE**. | No       |

!!! example
    `${__setProperty(propertyName,propertyValue)}`

### __env

This function returns the value of an environment variable.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Name          | Name of the environment variable to fetch.                   | Yes      |
| Variable name | Variable in which the result will be stored for later use.   | No       |
| Default value | If the environment variable doesn't exist, return this value instead. | No       |

!!! example
    `${__env(env_var,myvar)}`

## Scripting

### __groovy

This function returns the output of a [groovy](http://groovy-lang.org/) script.

It is sometime required to use a scripting language to deal with unusual behaviors. Although it is possible to write [JSR samplers/pre/postprocessors](https://api.octoperf.com/doc/design/edit-virtual-user/action-types/jsr223-actions/) it is sometimes faster to just go for a quick one line script just where it is required. 

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| Expression    | Groovy expression to evaluate.                             | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    It can be as easy as a simple condition for your while/if:
    

    ```java
    ${__groovy(${count}<=2)}
    ```
    
    Or you could compute a value:
    
    ```java
    ${__groovy(vars.get("myVar").substring(0\,2))}
    ```

!!! info
    If you make use of groovy, avoid using the `${...}` syntax for variables. Otherwise since the result may differ on each execution your script cannot be cached and may result in poor performance.

### __javaScript

This function returns the output of a JavaScript script.

It is sometime required to use a scripting language to deal with unusual behaviors. Although it is possible to write [JSR samplers/pre/postprocessors](https://api.octoperf.com/doc/design/edit-virtual-user/action-types/jsr223-actions/) it is sometimes faster to just go for a quick one line script just where it is required. 

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| Expression    | JavaScript expression to evaluate.                         | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    It can be as easy as a simple condition for your while/if:
    

    ```java
    ${__javaScript(${count}<=2)}
    ```
    
    Or you could compute a value:
    
    ```java
    ${__javaScript(${myvar}.slice(7\,15))}
    ```

## Variables

### __split

This function returns the value of the string passed as a first attribute. It stores the splits of this string in a list of variables.

| Attribute     | Description                                                  | Required |
| ------------- | ------------------------------------------------------------ | -------- |
| Name          | Name of the string to split.                                 | Yes      |
| Variable name | Variable in which the result will be stored for later use. If several splits, **_N** will be added at the end of the variable name. | Yes      |
| Delimiter     | The delimiter. Default is **,** (comma)                      | No       |

!!! example
    If myvar contains **this|is|a|list|42**, with:
    

    `${__split(${myvar},split,|)}`
    
    The output variables will be:


​    
​    * split_n = 5
​    * split_1 = this
​    * split_2 = is
​    * split_3 = a
​    * split_4 = list
​    * split_5 = 42
​    * split_6 = null
​    * etc...

### __eval

This function returns the result of evaluating a string expression. This is especially useful when you need to evaluate the variables and functions from inside a string stored inside a variable.

!!! example
    For example with the following variables:
    
    * name = "OctoPerf"
    * tool = "JMeter"
    * input = "${name} is ${tool} on steroids"
    
    `${__eval(${input})}`
    
    Will return: OctoPerf is JMeter on steroids

### __evalVar

This function returns the result of evaluating a string expression. It works exactly as [__eval](#__eval) but the variable syntax markers can be omitted.

!!! example
    `${__evalVar(input)}`

### __V

This function returns the result of evaluating a string expression. Since the `${...}` syntax used for variables does not allow nested variables this function must be used to tell JMeter to evaluate nested variables. It works exactly as [__eval](#__eval).

!!! example
    `${__V(categories_${counter})}`
    
    We already have a detailed example of a situation where this can be useful on the [while page](https://api.octoperf.com/doc/design/edit-virtual-user/action-types/logic-actions/while-action/#for-each).

### __isVarDefined

This function returns **TRUE** if the variable name exists or **FALSE** if it doesn't.

!!! example
    `${__isVarDefined(myvar)}`

### __isDefined

This function returns **1** if the variable name exists or **0** if it doesn't.

!!! example
    `${__isDefined(myvar)}`

## String

### __char

This function returns the result of evaluating a comma separated list of unicode codes. 

The number to be converted to a Unicode character can be: 

* Decimal number by **default**,
* Hex number, if prefixed by **0x**,
* Octal, if prefixed by **0**.

!!! example
    `${__char(13,10)}` will return **CRLF**
    

    `${__char(111,99,116,111,112,101,114,102)}` will return **octoperf**

### __changeCase

This function returns a string with changes to its case.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to update.                                          | Yes      |
| Case mode     | **UPPER**, **LOWER** or **CAPITALIZE**                     | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__changeCase(octoperf is JMeter on steroids,UPPER)}` will return **OCTOPERF IS JMETER ON STEROIDS**
    
    `${__changeCase(octoperf is JMeter on steroids,LOWER)}` will return **octoperf is jmeter on steroids**
    
    `${__changeCase(octoperf is JMeter on steroids,CAPITALIZE)}` will return **Octoperf Is JMeter On Steroids**

### __regexFunction

This function returns the result of a [regex](https://en.wikipedia.org/wiki/Regular_expression) expression applied to the last response. It works similarly to the [regex post processor](https://api.octoperf.com/doc/design/edit-virtual-user/action-types/post-processors/regexp-variable-extractor/) and offer the same configuration options.



### __strLen

This function returns the length of a string.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to evaluate.                                        | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__strLen(${myvar})}`

### __substring

This function returns a subset of a string.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to evaluate.                                        | Yes      |
| Begin index   | Index of the first char of the substring (starting at 0).  | Yes      |
| End index     | Index of the last char of the substring.                   | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__substring("OctoPerf is JMeter on steroids",13,19)}` will return **JMeter**.

### __strReplace

This function returns a string after replacing a subset of it.

| Attribute             | Description                                                  | Required |
| --------------------- | ------------------------------------------------------------ | -------- |
| String                | String to evaluate.                                          | Yes      |
| Substring to replace  | The subset that will be replaced. All matches will be replaced from beginning to end. | Yes      |
| Replacement substring | The string to replace with.                                  | Yes      |
| Variable name         | Variable in which the result will be stored for later use.   | No       |

!!! example
    `${__strReplace("OctoPerf is JMeter on steroids",on,with)}` will return **OctoPerf is JMeter with steroids**.

### __MD5

This function returns the MD5 hash of a string.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to hash.                                            | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__MD5("OctoPerf is JMeter on steroids")}` will return **fc1ddf979566cc0a07e94ba8a26d7e00**.

### __unescape

This function returns the result of evaluating a Java escaped string. It makes it easier to input special chars than using the UI.

!!! example
    `${ __unescape(\r\n)}` will return **CRLF**.

### __escapeHtml

This function returns a string and escapes the characters using HTML entities.

!!! example
    `${__escapeHtml("OctoPerf" & "JMeter")}` will return `&quot;OctoPerf&quot; &amp; &quot;JMeter&quot;`.

### __unescapeHtml

This function returns a string and unescapes the characters using HTML entities.

!!! example
    `${__unescapeHtml(&quot;OctoPerf&quot; &amp; &quot;JMeter&quot;)}` will return **"OctoPerf" & "JMeter"**.

### __escapeOroRegexpChars

This function returns a string where ORO Regexp meta characters are escaped.

!!! example
    `${__escapeOroRegexpChars([^"].+?,)}` will return `\[\^\"\]\.\+\?`.

### __escapeXml

This function returns a string where characters are escaped using XML 1.0 entities.

!!! example
    `${__escapeXml(&quot;OctoPerf&quot; &amp; &quot;JMeter&quot;)}` will return **"OctoPerf" & "JMeter"**.

### __urlencode

This function returns a string where URL chars have been encoded. Our [correlation rules](https://api.octoperf.com/doc/design/edit-virtual-user/configuration/auto-correlation/) will use this function when encoding is set to *Url encode*.

!!! example
    `${__urlencode(string th@t requires "encoding")}` will return `string+th%40t+requires+%22encoding%22`.

!!! info
    Using this function `spaces` were encoded as `+`, if you prefer to have them encoded as `%20` you can use another function like: `${__javaScript(encodeURIComponent("${query}"),)}`

### __urldecode

This function returns a string where URL chars have been decoded. Our [correlation rules](https://api.octoperf.com/doc/design/edit-virtual-user/configuration/auto-correlation/) will use this function when encoding is set to *Url decode*.

!!! example
    `${__urldecode(string+th%40t+requires+%22encoding%22)}` will return `string th@t requires "encoding"`.

### __base64Encode

This function returns a string encoded in [base64](https://en.wikipedia.org/wiki/Base64).

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to encode.                                          | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__base64Encode("OctoPerf is JMeter on steroids")}` will return **T2N0b1BlcmYgaXMgSk1ldGVyIG9uIHN0ZXJvaWRz**.

### __base64Decode

This function returns a string decoded from a [base64](https://en.wikipedia.org/wiki/Base64) value.

| Attribute     | Description                                                | Required |
| ------------- | ---------------------------------------------------------- | -------- |
| String        | String to decode.                                          | Yes      |
| Variable name | Variable in which the result will be stored for later use. | No       |

!!! example
    `${__base64Decode("T2N0b1BlcmYgaXMgSk1ldGVyIG9uIHN0ZXJvaWRz")}` will return **OctoPerf is JMeter on steroids**.
