Data-driven testing with datasets
Run one test case once per row of a spreadsheet. Upload the workbook you already use — no template, no rework, no column mapping.
Uploading a dataset
- Go to Datasets and drop in your .xlsx. It is parsed in your browser; nothing is uploaded until you save.
- Review the Checks strip. Amber chips want a decision from you; gray ones are informational.
- Check the preview grid — it shows exactly what the engine will type, not just what is in the cell.
- Name it and Save dataset.
Tokens
Every column becomes a token you paste into a test step where the value goes:
Enter {{data:AccountCreation.FIRST NAME}} in the 'First Name' field
The quoted 'First Name' is still the on-screen label the engine looks for. Only the value becomes a token. Copy exact tokens from the preview grid using copy token.
A token names its own sheet, so a single test case can pull from several sheets in the same iteration — account details from one, policy dates from another.
Repeated headers
Where one sheet uses the same header twice — say STATE for both a search field and a mailing address — the later occurrence gets a ~2 suffix: {{data:AccountCreation.STATE~2}}. The Checks panel lists every one, because position is the only thing distinguishing them and you should confirm which is which.
Other rules
- Matching ignores case, and leading, trailing or repeated spaces.
- A column with no header is addressable by position:
{{data:Offerings.col1}}. - To type a literal
{{, escape it as{{{{. - Avoid wrapping a token in quotes — quoted text in a step is treated as an element label to find.
How values are typed
| Type | Behavior |
|---|---|
| Dates | Formatted as MM/dd/yyyy, never a raw timestamp. |
| ZIP / SSN / phone | Zero-padded back to full width. |
| Numbers | Typed as displayed, with thousands separators removed. |
| Text | As-is. |
04567 as the number 4567 — the zero is gone from the file itself and cannot be recovered from it. Test Executor re-pads columns whose names look like ZIP, SSN or phone, and lists every one it changed in the Checks panel. Confirm those are right, and change the column type in the grid if not.Sheet roles
| Iteration sheets | Child collections |
|---|---|
| Row count matches the majority | Row count disagrees — three drivers across two policies |
| Row 1 drives iteration 1, row 2 drives iteration 2 | Not extra iterations — lists attached to one record |
| These determine how many times the test runs | Their tokens resolve to row 1 every time in this release |
The classification is shown on each sheet tab and can be overridden with change.
Running with a dataset
On New Execution, pick your dataset under Data. The note tells you how many times each test case will run. Only test cases that actually contain a {{data: token are iterated — a token-free test case in the same selection runs once, not N times.
Each iteration gets its own verdict and its own evidence, and appears as TC-002#1, TC-002#2 and so on. A failing row does not stop the run. The detail page badges each one 📊 DATA DRIVEN · row 2 of 2 and states how many of its steps actually took values from the row — a quick way to spot a test case you only half-tokenized.
If a token cannot be resolved
The engine never types an unresolved token into your application. A step referencing a column that does not exist fails immediately, naming the token and suggesting the closest matches. Tokens are also validated when you bind a dataset, so a typo surfaces before the run starts rather than forty minutes into it.
