Skip to main content
The --data <file> flag runs a journey multiple times in parallel, once for each row (CSV) or object (JSON array) in your data file. Each row provides a distinct set of run inputs. This is the CLI equivalent of data-driven parallel runs — useful for load-shaped testing, multi-user scenarios, or validating a journey across a set of known inputs.

When to use it

  • Testing a journey across multiple users, accounts, or input combinations in one command.
  • Running a data-driven regression suite — e.g., verifying every record in a test dataset passes.
  • Simulating parallel load against an API workflow with varied inputs.
  • Any scenario where you’d otherwise loop reqflo run manually across a set of values.

Key concepts

Each row is one run. The CLI spawns one journey execution per row/object. Runs execute in parallel up to the runner’s concurrency limit. Each run receives the values from its row as run inputs. Column names map to run input keys. For CSV files, each column header maps to a run input key by name. For JSON files, each object’s keys map to run input keys. Column/key names must match the journey’s declared run input names. Composable with other flags. You can combine --data with --env, --case, and --set. Shared values (environment, case) apply to all rows; --set overrides apply to all rows too. Row-level values are merged with the shared context, with row values taking precedence for matching keys. Local and cloud. --data works with both local and cloud runs. For large data files, --cloud is recommended so parallel runs don’t compete for local resources.

How it works

  1. The CLI reads the data file and parses each row/object.
  2. One journey run is created per row, with the row’s values loaded as run inputs.
  3. Shared values from --env, --case, and --set are merged in (row values win on conflicts).
  4. Runs execute in parallel.
  5. Results are aggregated and reported — each run’s result is identified by its row index or a key column if one is designated.

Examples

Run with a CSV file:
reqflo run my-journey --data ./test-data/users.csv
Run with a JSON file:
reqflo run my-journey --data ./test-data/accounts.json
Combine with an environment:
reqflo run my-journey --data ./test-data/users.csv --env staging
Run data-driven in the Cloud Runner with JUnit output:
reqflo run my-journey --data ./test-data/users.csv --cloud --reporter junit --output ./results/report.xml
Example CSV structure:
user_id,account_id,amount
usr_001,acct_001,100
usr_002,acct_002,250
usr_003,acct_003,500
Equivalent JSON structure:
[
  { "user_id": "usr_001", "account_id": "acct_001", "amount": "100" },
  { "user_id": "usr_002", "account_id": "acct_002", "amount": "250" },
  { "user_id": "usr_003", "account_id": "acct_003", "amount": "500" }
]
All values in CSV files are strings. Make sure the journey’s value handling is compatible with string inputs, or that any necessary coercion is handled in the journey’s step configuration.