Setting up
Environments, variables, generated values, app adapters and fixtures.
Environments
An environment is where a run happens: a base URL, plus values that differ between dev, staging and production. One case runs against all of them without being rewritten.
Variables
Configuration → Variables holds values every case can use. Write {{name}} in any field and the run fills it in.
- The name is the same everywhere, so a case can be written before anybody picks an environment.
- A value is either the same everywhere or set per environment.
- Mark one secret and it is encrypted at rest, decrypted only when a run needs it, and never shown again.
Generated values
Some values should be different every run. Write them with ${…}:
| Write | You get |
|---|---|
${email} |
a fresh address at your project's domain |
${int:1-100} |
a number in a range |
${digits:6} |
a code |
${name}, ${company}, ${phone} |
plausible people and companies |
${date:+7d} |
a date, relative to today |
${pick:red|green|blue} |
one of those |
Name one to reuse it: ${int:1-100 as amount}, then {{amount}} anywhere later in the same case. A name must not collide with a variable or a parameter — the editor says so, and the run refuses rather than guess.
The Syntax page in your project lists all of them with live examples, and typing ${ in any field offers them.
App adapters
An adapter is your app's vocabulary: the elements you point at often, named once and reused. Bind them with the element picker — click through your product and Cettara records a selector that it has checked against the live page.
Preference order is data-testid, then a label, then an accessible role and name, and only then CSS — so renaming a class does not break your tests.
Fixtures
Files your tests upload, and files your tests downloaded. Both live under Fixtures, and an upload step attaches one by name.
Backend requests
A request calls your API in the middle of a test — to seed data, or to check what the UI claims. A later step reads the answer with {{request_1.response.id}}.