A tour of what OttoTester does — from writing your tests to healing them, grading its own work, and reporting the results where your team already works.
Turn a plain-English goal or a spec into a working test — no recording, no scripting.
Proposes tests from your docs
Reads your PRDs and specs and suggests the test cases they imply, prioritized against what's already covered.
Plans each test on your live app
Drives a real browser through your app to design each test's steps, the data it needs, and what counts as success.
Writes the test itself
Produces a working Playwright test by exploring the app from a plain-English goal — no recording or scripting by you.
Reads your stack and sign-in
Scans a URL to detect the framework, page structure, and where the login lives before any testing starts.
Keeps tests green as your app changes.
Fixes tests when your app changes
Diagnoses a broken test, repairs it on its own, and re-runs to confirm the fix still checks the same outcome.
Every run leaves behind lessons the next run reuses — and the useless ones get dropped.
Learns from every run
Turns each run into reusable lessons — selectors, timing, anti-patterns — that steer the next run on your app.
Keeps only the lessons that help
Measures whether each lesson actually improved a run and drops the dead weight over time.
Reset learned memory per app
One click clears everything an app's agents have learned, for a clean-slate re-test.
A separate auditor grades the agents' own work, so you can trust the autonomy instead of taking it on faith.
Grades every test it writes
A separate auditor scores each generated test 0–100 across five quality dimensions.
Grades every plan
Scores each test plan for structural quality before any code is written.
Grades every repair
Scores each self-heal so a fix can be trusted, not just assumed to be safe.
Shows why a test scored low
Every score comes with per-dimension evidence, so you can see exactly why a test got a 1.
What real apps need — signing in as each role, and feeding tests real data without two runs fighting over the same account.
Signs in as any user role
Signs tests in per role using stored credentials, multi-step flows, and one-time codes the agent never sees.
Ready-made sign-in helpers
Matches your identity provider — Okta, Login.gov, and more — and signs in without the AI guessing.
Test data as a table or CSV
Give tests rows and columns to fill and check, imported from a CSV or edited in a spreadsheet-style grid.
Single-use rows
Claims an unused row at run time so two parallel tests never grab the same account.
Connect data to a test
Maps a data set to a test and shows a clear diff when a rewrite shifts the fields.
Files as test data
Store files as test data so agents can write and run file-upload tests.
Results you can act on — what broke, whether it's new, how it's trending, and the trace to prove it.
Health dashboard per environment
One overview per environment with an at-a-glance pass/fail health badge.
Sorts failures to act on
Buckets failing tests into new, still-failing, flaky, and resolved.
Flaky tests and trends
Surfaces intermittently-failing tests with their real failure rate, plus pass-rate trends over time.
Compare two releases
Diffs outcomes between two releases or date ranges for a go/no-go call.
Full trace, screenshot, video
Drill from any failed test into the Playwright trace, DOM snapshot, screenshots, and video.
PDF reports and captured errors
Emails a branded PDF on completion and captures the console and network errors seen during a run.
Plugs into where teams already work — pull requests, deploys, defect tracking, and Slack.
Verdict on every pull request
Posts pass/fail back to GitHub as a native status check, with a re-run button. Any CI can trigger runs through the API.
Runs on every deploy
Fires a run automatically when a deployment succeeds.
Trigger runs from any pipeline
A versioned API and a ready-made GitHub Action to launch runs from your build.
Files defects automatically
Opens deduplicated GitHub issues when tests break and closes them when they pass again.
Results in Slack
Routes run results to the Slack channels you choose, by app and event, threaded together.
Where the tests live and how you keep them organized, versioned, and scheduled.
Apps and environments
Organize each product you test and its per-environment targets — staging, prod, and more.
Every test in one place
One browser for all tests, showing the plain-English intent beside the runnable script.
Version history for every test
Git-backed history with a diff view and one-click restore of any prior version.
Multi-step workflow suites
Chain tests into ordered suites that stop or skip the rest when one step fails.
Saved and scheduled runs
Reusable run setups — including resume of interrupted work — that can run on a daily or weekly schedule.
The controls a security team asks for.
Workspaces, teams & roles
Two-tier organization and workspace roles with team-based access across your whole company.
Audit log
An immutable record of who did what and when — per organization and platform-wide.
Secrets encrypted at rest
Every stored password, token, and one-time-code secret is AES-256-GCM encrypted.
Bring your own AI models Enterprise
Point the agents at your own model endpoint on a dedicated or self-hosted deployment.
Cost & quality analytics Enterprise
Per-run cost, token, and quality-score dashboards, plus per-model comparisons.
Single sign-on (SSO / SAML) Coming soon
SAML single sign-on for enterprise identity providers — on the near-term roadmap.
Start a 14-day free trial — your card isn't charged until day 15.
Start free trial