Skip to content

Test data — feed every virtual user its own rows

A dataset is a table of rows that a test reads at run time. Use it so each VU logs in as a different user, buys a different product, or sends a different payload, instead of every VU hammering the same row. That keeps caches, unique-constraint checks, and read distributions honest.

Feed real data into a load test.

Open Test data in the left navigation and click New Dataset. The Create dataset page offers two starting points:

  • Import CSV. Upload a file. MaxoPerf detects the delimiter, the encoding, and whether the first row is a header (shown by the First row is header switch), then previews the first five rows. A file you already uploaded to the workspace’s Shared CSV Files library is on the Shared CSV tab, so a users.csv you uploaded for one test is one click away in the next.
  • Blank dataset. Start with no file at all and generate rows from scratch. A blank dataset starts at 1,000 rows; change the Row count before you open the workbench, or the Rows setting on the workbench later.

You don’t have to choose one or the other. A dataset can mix CSV-sourced columns and synthetic columns in the same table.

The dataset workbench is a preview table of the dataset’s rows. Add Column chooses what fills a new column: Fake Data (a synthetic generator such as names, emails, addresses, or numbers, searchable by name or category), From CSV File, or From Dataset (a column of another dataset). Select a column to open its Column Inspector; its Source Provider line shows where the column’s values come from.

Every column carries an ordered Transformation Pipeline: trim, case changes, regex extract and replace, date and number formatting, prefixes and suffixes, defaults, and more. Add one from the Column Inspector and MaxoPerf shows a live before/after preview against real rows as you configure it, so you can see the effect before you save.

For logic the built-in transforms don’t cover, add a JavaScript snippet transform backed by a reusable workspace snippet: write it once, search for it by name from any column on any dataset, and reuse it. Editing a snippet later creates a new revision; a dataset keeps the revision it was pinned to, so an edit never silently changes results you already reported.

Bind it to a test and split it across runners

Section titled “Bind it to a test and split it across runners”

Open a test, switch to its Data tab, and pick a Bound Dataset on the Test data tab. Then choose:

  • Multi-runner distribution strategy: Disjoint slices (split) gives each runner its own range of rows, so no row is used by two runners; Full replicated gives every runner the whole dataset. Runner allocation shows the planned row range per runner.
  • End-of-file behavior: what a virtual user does once its rows run out: Recycle dataset loops over them, Stop at end stops the virtual user. This control is only enabled when MaxoPerf can actually patch the test’s script for both behaviors; for a combination it can’t patch yet, the control stays visible but disabled with the reason, and any EOF preference you had saved stays stored and comes back the moment you switch to a supported combination.

End-of-file support depends on the test’s engine and how the script was built. It’s conditional (works when MaxoPerf recognizes and can patch the concrete script) for JMeter, k6, Locust, Gatling, and apiritif; a test using the generic Taurus engine follows the rule of the engine it delegates to, and is unsupported when that engine can’t be resolved. Every other engine currently shows the control disabled, because MaxoPerf has no proven way to patch that engine’s script for end-of-file behavior yet.

Once a binding is saved, MaxoPerf delivers the dataset to every runner of the run at the same path and env var, whether the run has one runner or many: /work/run/data/<file-name>.csv and MAXOPERF_DATASET_<FILE_NAME>_CSV, plus a shared MAXOPERF_DATA_DIR. The File name comes from the binding, not the dataset’s current name, so renaming or swapping the dataset never moves the file. See Use the data in your script for the JMeter, k6, Locust, Gatling, and Taurus routes.

Test data is available on every MaxoPerf plan.

Every run’s Data tab shows the data manifest MaxoPerf materialized for that run: which dataset was bound, how it was distributed, and each file it delivered (one slice per runner for a split dataset, one shared file for a replicated one) with its path, row count, and SHA-256 checksum. Use it to confirm a run got the data you configured.