TestStudio
Black-box acceptance tests, as data.
Author Playwright tests in the same shell as the rest of your work. Lifecycle phases, fixture dependencies, assertion counts. No CI, no per-machine licenses.
The problem with tests-as-code.
Cypress and Playwright Test live in your repo. They run in CI. They log to CI artifacts in a third place. The team that ships the feature doesn't see the test until it breaks. The team that wrote the test forgets which fixture it depends on.
Tests are code, not data. You can't query your test suite the way you query your application. You can't sync tests between environments through the same tools that sync your data. Tests drift from the application they cover.
Key features
A test framework that knows it lives in a workspace.
Lifecycle phases as first-class fields.
Setup, Verify, Cleanup, On Failure — each references a saved Script Runner script. Cleanup runs always in finally. On Failure runs only on prior-phase failure for diagnostics. Status precedence (failed > cleanup_failed > setup_failed > complete) makes flaky cascade failures impossible.
Three assertion APIs.
expect — Playwright native, throws sync on failure.
softExpect — failures collect into a soft-fail list; the script keeps running so you see every mismatch in one shot.
assert(cond, msg) — plain truthy check for non-DOM conditions. Every call increments the run's assertion counter, persisted to the run document.
Declare fixture dependencies; runner enforces.
Add fixture tenant slugs to a test. The runner verifies the fixture exists before setup fires. Missing fixture? The test is marked setup_failed immediately — no flaky cascade of "was it the data or the code?"
Scheduled runs with quota enforcement.
Click + Schedule, pick a cron expression and timezone. Schedules respect tenant monthly quotas — hit the cap and the next fire marks last_status as quota_denied, logs the denial, skips dispatch without inflating failure_count.
Run history inline. No CI dashboard hop.
Every run produces a _test_pilot_run document with status, duration, assertion tally, per-phase trace, log streams, error stacks, and screenshots. The run-detail panel renders all of it inline.
What only TestStudio offers
Things Cypress and Playwright Test cannot do.
Use cases
What teams build with TestStudio.
Phase acceptance gates
Tag tests with a test_suite, run them all before promoting to staging. Failed assertions point at the exact scenario.
Per-tenant smoke tests
Scheduled run every morning against each fixture tenant. Quota-denied runs flag plan-limit issues. Failed runs page on-call.
Negative-path regression
Set expected_outcome to fail for "this should be 403" tests. Pass criterion: the assertion threw. Cleaner than skip-with-comment.
Visual sanity
Cleanup phase takes a full-page screenshot, stores the R2 URL. Diff against a baseline manually or via the Visual Regression scaffold (Enterprise).
Test like your team works.
TestStudio is included in every Solo and Team subscription. No per-parallel charges. No per-execution charges.