Skip to main content

The shape of a good instruction

Say what to do and what should be true afterwards.
That sentence names a starting point, an action sequence, and an observable outcome. All three matter.

Rules that earn their keep

Testorim does not know your site’s wording before it opens it, and it will not invent copy. Write “check the confirmation message appears”, not “check it says ‘Thanks! Your order #12345 is confirmed.’”, unless you have read that exact string on the page.A test that asserts invented copy fails against a perfectly healthy site.
A plan holds up to 40 steps. That is enough for checkout with cart arithmetic and a confirmation, but not for sign-up and checkout and account deletion. Split them, and you also get three independent signals instead of one.
“Check the search works” gives nothing to verify. “Search for ‘backpack’ and check at least one result mentions Backpack” does.If you ask for a check and no step performs it, the run says so rather than passing quietly.
On a listing page, “click the product” is ambiguous and “click the first product” is not. For a row-scoped control, name the row: “click Delete in the Blue Top row”.
If an element genuinely has no accessible name, label, placeholder or test id, write its selector as the target: #order-total, .toast, [data-testid="cart"]. A target starting with #, . or [ is treated as CSS and matched exactly.
For a scrape, import or batch job, raise the time limit and describe the finished state loosely (“wait until the page shows it is complete”) rather than guessing the exact completion phrase.

Worked comparisons

Negative tests

Mark a test Should fail when the app is supposed to refuse. The run passes when the action is correctly rejected.
Do not use it for a test you expect to break. It is about the app’s intended behaviour, not your prediction.

Credentials and secrets

Put real credentials in the instruction only for throwaway test accounts. For anything else:
  • Let Testorim ask: leave the credentials out and it shows a masked form.
  • Use variables for values that change per run.
  • Use environment cookies and headers for real secrets: they are encrypted at rest and never reach a model.
Values typed into password, secret, token, PIN, OTP, CVV and SSN fields are redacted before the run is stored, before the report is written, and before anything is shared.