# Test Data

Emit deterministic synthetic records, or inline records you supply.

## When to use it

Supply predictable sample records or a configured synthetic set. Use representative empty, missing-field, and mixed-type cases when testing a transform. Keep sample records clearly separate from business results.

## Add and configure

1. Add **Test Data** from the workflow step picker.
2. Give the step a recognisable name and connect its required inputs.
3. Set the options below. Nested names identify fields within an object or a list item.
4. Validate the recipe, inspect the test result, then run it on the intended data.

The step identifier used in the editor’s code view is `test_data`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Batch Size (`batch_size`) | integer; minimum 1; maximum 10000 | No | 50 | Records processed or emitted in a batch. |
| Data Source (`data_source`) | "generated" / "hardcoded" | No | "generated" | Choose generated synthetic records or the hardcoded records supplied in settings. |
| Record Count (`record_count`) | integer; minimum 0; maximum 10000 | No | 10 | Number of synthetic records to generate (generated mode). |
| Records (`records`) | list of object | No | Not specified | Inline records to emit (hardcoded mode, max 1000). |

## Inputs and outputs

| Direction | Port | Content | Required | Multiple records |
| --- | --- | --- | --- | --- |
| Inputs | `in` | none | Yes | Yes |
| Outputs | `out` | records | Yes | Yes |

### Outputs record fields

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Body (`body`) | string | Yes | Not specified | — |
| Created At (`created_at`) | number | Yes | Not specified | — |
| Id (`id`) | integer | Yes | Not specified | — |
| Title (`title`) | string | Yes | Not specified | — |

## Effects, testing, and recovery

Transforms or passes records without a declared external side effect.

The declared preview behaviour is to execute this step. Reads, processing, or model usage can therefore be real. Read [dry runs](/docs/workflows/dry-runs) before using a preview with live connections.

No duplicate-prevention key is declared for this step. The step declares safe replay for its supported recovery path.

## Example: Two generated records

Step settings:

```json
{
  "data_source": "generated",
  "record_count": 2
}
```

Expected output for this example:

```json
[
  {
    "body": "Synthetic record body #1",
    "created_at": 1767225600.0,
    "id": 1,
    "title": "Record 1"
  },
  {
    "body": "Synthetic record body #2",
    "created_at": 1767225601.0,
    "id": 2,
    "title": "Record 2"
  }
]
```

## Example: Inline records (the retired seed_records shape)

Step settings:

```json
{
  "data_source": "hardcoded",
  "records": [
    {
      "name": "Alice"
    },
    {
      "name": "Bob"
    }
  ]
}
```

Expected output for this example:

```json
[
  {
    "name": "Alice"
  },
  {
    "name": "Bob"
  }
]
```

## Check the result

Inspect the selected run’s status, counts, errors, and output records. An empty collection can be a valid result, and a completed step can contain per-record failures where the step defines that behaviour. Check the next step’s expected record shape before publishing or delivering the result.
