at.flow
The at.flow namespace is the short-term memory that connects steps together. Unlike at.environment, nothing here is written to disk — flow variables live in memory only, for as long as the flow or load test is running, and disappear when the run ends.
The name can be confusing: at.flowis not the Flow Runner module. It is an in-memory key-value store that is available inside both Flow Runner execution and Load Test execution. The Flow Runner module is one of the places where it is useful; load tests are the other.
Three Methods
- •at.flow.get(key) — returns the stored value, or undefined if the key does not exist.
- •at.flow.set(key, value) — writes a flow variable for the rest of the current iteration.
- •at.flow.has(key) — returns true if the key has been set.
Using Flow Variables in Request Fields
Variables stored via at.flow.set()are referenced with {{flow.varName}}syntax and are injected into subsequent steps at request-build time:
- •URL: {{base_url}}/users/{{flow.userId}}
- •Headers: Authorization: Bearer {{flow.token}}
- •Request body: {"user":"{{flow.userId}}"}
- •Assertion expected values: expected: {{flow.expectedId}}
Flow Variables vs. Environment Variables
The two stores look almost identical — same shape of get / set / has methods — but they are meant for very different things:
- •Lifetime: environment variables are persisted to disk and survive app restarts. Flow variables live only for the duration of a single run and are cleared when the run ends.
- •Placeholder syntax: environment variables are {{varName}}, flow variables are {{flow.varName}}.
- •Use case: environment is for secrets, base URLs, and long-lived configuration. Flow is for step-to-step handoff — a token extracted in step 1 that step 2 needs, a newly-created user ID that step 3 must delete, a dynamic assertion target computed in a pre-script.
When at.flow Is Available
Flow variables only make sense when there is a run to carry them. Calling any at.flow method from a script that is not running inside a flow or load test throws:
Error: at.flow is only available inside flow execution
In practice, this means:
- •Standalone HTTP request (Box tab): at.flow throws. Use at.environment instead if you need to persist something.
- •Project request run standalone: same — at.flow throws.
- •Flow step / Flow Before All / Flow After All: at.flow works. Variables set in one step are visible in every later step of the same iteration.
- •Load test step / Load Test Before All / Load Test After All: at.flow works. Each virtual user sees its own independent flow store.
Example — Three-Step Flow
A flow with Create User → Get User → Delete User steps:
const data = at.response.json();
at.flow.set("userId", String(data.id));
at.flow.set("username", data.username);