New: Autonomous quality engineering

AI writes your code. Who tests it?

OttoTester does — autonomously. It explores your web app from a plain-English goal, writes the tests, heals them when the UI changes, learns from every run, and grades its own work. See each part →

Free 14-day trial No credit card Self-serve setup
proposed tests 1 / 7
Coverage you can trust
📄 Reading checkout-prd.md — proposing the tests it implies
P0 Guest can complete checkout gap
P0 Declined card shows a clear error gap
P1 Discount code applies to the total covered
P2 Cart persists after sign-in gap
Coverage
13 / 21 · 8 gaps
Soon Pull requirements & production defects from Jira — so coverage stays honest as the product changes.
Goal · "A user can sign in and reach the dashboard"
1import { test, expect } from '@/test'
2
3// Written by OttoTester after exploring the app.
4test('user can sign in with email + password', async ({ page }) => {
5  await page.goto('/auth/login')
6  await page.getByLabel('Email').fill(env.AUTH_user_EMAIL)
7  await page.getByLabel('Password').fill(env.AUTH_user_PASSWORD)
8  await page.getByRole('button', { name: /sign in/i }).click()
9  await expect(page).toHaveURL('/dashboard')
10  await expect(page.getByText(/welcome back/i)).toBeVisible()
11})
Self-healing
⚠ UI changed — the sign-in button was relabeled "Sign in" → "Log in".
8 await page.getByRole('button', {
- name: /sign in/i
+ name: /log in/i
9 }).click()
Re-ran automatically · 1 passed · fix shipped, the test still checks the same outcome.
Self-improving
72%
Run 1
84%
Run 2
91%
Run 3
97%
Run 4
99%
Run 5
What Otto learned — and kept, because it helped
Wait for /api/cart to settle before asserting the total
Prefer role-based locators over brittle CSS for the nav
Checkout button label varies: "Pay" / "Place order"
QA of QAA separate agent grades Otto's own work
Plan quality
92
Test quality
88
Heal quality
95
Auditor: assertions verify real user outcomes — no empty or vacuous checks, no silent skips.
Always on the right model
✓ Managed by OttoTester — upgraded as better models ship
Scanner frontier model
Proposer frontier model
Planner frontier model
Generator frontier model
Healer frontier model
Analyzer frontier model
Auditor frontier model
Higher plans get the newest models first.
Enterprise Bring your own models, keys & private endpoint, on a dedicated or self-hosted deployment — so you control which AI models your data is sent to, right down to a fully private, in-environment model.
Fits your workflowGitHub · CI · Slack
Pull request checks
build · passed
OttoTester / e2e · 12 passed, 1 self-healed Required
OttoTesterAPP#qa-alerts6:02 AM
✅ Nightly run on staging — 48/48 passed, 2 self-healed. View report ↗

Point Otto at a PRD, design doc, or spec. It proposes the test cases they imply — prioritized and mapped against what's already covered, so you see coverage gaps before you ship.

Why teams pick OttoTester

The testing workflow you wished you had.

Plan, generate, run, heal — all four phases in one place, and the agent does the writing.

📝

Plan from prose

Drop a PRD, a design doc, or just describe the feature in plain English. The planner explores your app, proposes candidate tests, and surfaces them for your review before any code is written.

⚙️

Generate the test

End-to-end, functional, and regression tests with semantic, accessibility-aware locators. Credentials flow through env vars; shared data sets feed pooled inputs.

▶️

Run in CI

On every commit. PR check-runs report the verdict natively in GitHub. Failed tests open issues automatically. Any CI can trigger runs through the API.

🩹

Self-heal on failure

When a locator or expected value drifts, the healer diagnoses the root cause and ships a fix — without rewriting the test.

How it works

Three steps from plain English to shipping.

1

Connect an app

Point OttoTester at your dev URL. We open a managed browser session against it.

2

Describe what to test

Tell OttoTester what to cover in plain English. The agent explores your app on its own and proposes test candidates for you to review.

3

Approve and ship

Review the generated tests, approve what looks right, and OttoTester writes them into your repo. Done.

Get the first test on green in under 10 minutes.

Free for 14 days. No credit card. Cancel any time.

Start Free → Read the docs