Skip to main content
QA Wolf runs all flows in parallel by default but some workflows require the ability to coordinate and share data asynchronously through declared relationships, even while running concurrently across multiple users and multiple devices.During a run, any QA Wolf flow can both produce data for another flow and consume data from others. For example, one flow might create a new user, another might log in as that user, and a third might verify the user’s activity — all within the same coordinated run.
  • As a producer, a flow uses setOutput to publish data.
  • As a consumer, it reads published data from workflowInputs.
This cross-flow communication powers a capability unique to QA Wolf: linked user journeys, which we call Hopper Flows. Hopper Flows enable true end-to-end, multi-user, multi-platform testing — the kind of real-world scenarios that traditional, single-flow testing simply can’t reproduce.By connecting flows in this way, QA Wolf expands what’s possible in automated testing. You can model complete customer experiences that span devices, roles, and systems — all while keeping the speed and reliability of parallel execution.
To create a Hopper you flow, you need two tests in separate flows. Those flows can belong to the same group and even share tags.We will call Flow A the producer and Flow B the consumer.In Flow A, use setOutput to publish key–value pairs that other flows can access. The example uses the TOKEN and USER_ID keys.
// Flow A publishing values
setOutput("**TOKEN**", "abc123", "**USER_ID**", "42"); 
If the same flow calls setOutput multiple times, it will simply overwrite the key. However, if two or more different flows produce values for the same key and a third flow depends on both, that third flow will fail to run with the error Workflow run failed due to conflicting dependency outputs
Now, go to Flow B and use workflowInputs to read values published by Flow A.
// Flow B consuming values
const token = workflowInputs["**TOKEN**"];
const userId = workflowInputs["**USER_ID**"]
  • To run flows together, create a schedule that targets all flows or flows with a shared tag. A scheduled run that includes all producers and consumers. A scheduled run can include either all flows in the environment or only flows with a specific tag.
  • To control execution order, create a Run Rule that runs producers before consumers. Run Rules that define execution order. Run Rules ensure producers run before consumers. They can be defined using groups, tags, or specific flow names.
Producers and consumers must be included in the same scheduled run.
If a flow acts as both a producer and a consumer, create two Run Rules: one to run it after its producer and another to run it before its consumer.
Last modified on February 9, 2026