Variables are parts of yaml structure (primitive values, objects, or lists) that can be accessed by name. The name is relative to a context. For now, we assume one context per test. This is to be refined later in {T227887}.
Variables provide a mechanism for taking a value from a response and using it in a subsequent request. Variables may also provideaccess to configuration settings, see {T228865}.
Variables can be assigned a value in two ways:
* directly, in a variables stanza. The variable stanza is an object mapping keys (variable names) to values. Special tags are evaluated before assigning the value, e.g. `p/uniq` (see T228884).
* by "grabbing" a value in a response, using the `p/grab` tag followed by the variable name.
Variable values can be used as follows:
* raw, via the `p/var` tag followed by the variable name.
* (future) in an interpolation expression (ix), using the `p/ix` tag followed by a string. Eventually, that string should support a way to access variables (string interpolation). The specification and implementation of interpolation expressions is tracked in T228874.
Variable names follow the pattern `/^[a-z][-_a-z0-9]*$/i`. The characters `/`, `\\`, `@`, `$`, `:`, and `.` are reserved for use in variable expressions, e.g. as prefix separators or markers.
Example:
```
tests:
- description: create and delete
variables:
- title: p/ix: "Test_{{#random:16}}" # Interpolation expression with function call
interaction:
- request:
action: create
page: p/var: title # defined above
- response:
body:
create:
page-id: p/grab: page-id # grab the value from the response
- request:
use-session: Bob
action: delete
page-id: p/var: page-id # use the value grabbed above
```