Guide

Getting started with TestVibe

Your first hour in the product, from signing in to reading your first test result. Sign in with the email on your subscription — the same sign-in as the download portal.

We send a 6-digit code. Access is limited to emails on an active self-hosted subscription — talk to sales if you do not have one yet.

We sent a code to . It expires in 10 minutes.

Guide

Getting started with TestVibe

You have been handed a working TestVibe. This page is the path from an empty project to a test result you can act on. Do it in order the first time.

01

What TestVibe does

You point TestVibe at a web app and describe a behaviour in plain English. It opens your site in a cloud browser, finds the real buttons and fields, and writes a Playwright test. It runs that test once to prove it passes before it keeps it. After that you run it whenever you like and read the result.

The whole thing in five words

Project One web app, identified by its Base URL. Test feature What should happen, written as Gherkin. Generation Explore the app, write the test, verify it passes. Run The saved spec, in an isolated cloud browser. Result Scenario tree, media, logs and a trace. You write these TestVibe does this You read this A generated test is a real Playwright spec, not a recording of a script. It is written against the controls your app actually renders, and it is executed once — by the same harness a real run uses — before TestVibe will save it. A test that never went green is never presented as one.
Diagram — project to result. The blue box is the only step the AI touches; the run itself is ordinary Playwright.

TestVibe words you will see

Project
One web app under test, identified by a Base URL. It owns your test features, runs, settings and variables.
Test feature
What you write: a .feature file in Gherkin, with Feature, Background, Scenario and Given/When/Then steps. Each Scenario becomes a Playwright test(), each step a test.step(), and Background becomes setup that runs before every scenario — which is why results read as scenarios and steps.
Generation
Turning a test feature into a runnable Playwright spec. Costs credits, takes minutes.
Run
One execution of generated tests against a chosen environment. It produces artifacts: traces, screenshots, videos, logs, reports.
Workspace
The organisation that owns the projects, the members and the credits.
Two kinds of code, kept apart. App Code is your application's source, linked read-only so the AI can read it. Test files are TestVibe's own content — your features, the generated specs, the Playwright configs. "Test files" never means your app.
02

Sign in and add your app

About a minute of work. The only decision that matters is which URL you point at.

Signing in

  • Email and password. Enter your Email and Password, then press Sign in. Create an account switches the card to sign-up mode; passwords need at least 8 characters including a letter and a number. Forgot password? leads to Send reset link.
  • Single sign-on. You may also see Continue with GitHub, Continue with Google, or your company's own button. Providers that are not configured show no button at all.
A new sign-up must verify its email first. Creating an account does not sign you in — it sends a verification link and shows Check your email. Signing up through an invitation link, with exactly the invited address, skips this. If no link arrives, your install probably has no mail relay yet: ask whoever runs it for an invitation link instead.

Creating the project

  1. On a brand-new account a dialog titled Add your app opens by itself. Otherwise press New project.
  2. Fill in Base URL — the site TestVibe generates and runs tests against, for example https://app.example.com. You should see Project name fill in from the host as you type. The name is only a label; edit it or leave it.
  3. Optionally pick a Target framework chip: React, Angular, Next.js, Vue, Wisej.NET or Other. TestVibe auto-detects on the first visit, so blank is fine. But if your app is built with a widget framework that renders anonymous <div>s instead of real buttons, setting this is the highest-value thing you can do before generating.
  4. Press Add app (or Create project). You should land on the project dashboard.

You can change the Base URL later in Settings → Overview.

The left nav

Your map for the rest of this page. You will spend this hour in the first two.

Nav sectionWhat lives there
Test FeaturesYour tests, in groups. Where you write, generate and open them.
RunsEvery run, and every run's results.
SettingsEnvironments, variables and secrets, AI model, connectors, API keys.
DashboardProject overview, what is running now, and a Getting started checklist.
AssistantA chat that can act: explore your app, draft tests, start runs, explain a failure.
App Code · Load Testing · Automations · Plugins · Knowledge BaseAll covered in section 08.

Choosing the right URL

  • Include the scheme. https://app.example.com, not app.example.com.
  • Use test or staging, not production. The tests really click the buttons. If a scenario creates an order, an order gets created.
  • It must be reachable from where the tests execute — a cloud browser, not your laptop. A VPN-only name or localhost fails with a connection error. For a private app, TestVibe can reach it without exposing it: a runner you host inside your network, or an outbound-only tunnel. Both live in Settings; ask your administrator which you have.
  • Point at a stable starting page — the home page, or the login page. Every test begins at whatever that URL opens, so a deep link quietly limits everything.
  • Never put credentials in the URL. Put them in Settings → Variables & Secrets: a variable for the username, a secret for the password. Secrets are write-only. You reference them from test text as {{var:NAME}} and {{secret:NAME}}.
Do this now, not later If your app needs a login, add the username variable and the password secret before you generate anything. TestVibe drafts against the token names your project already defines. Do it first and every test reuses them; do it after and you get invented names to clean up.

To run the same tests against staging and a preview build later, add those under Settings → Environments and pick one per run. You do not need a second project.

03

Describe the test

This decides the quality of everything that follows. TestVibe faithfully builds whatever you describe, so a vague description produces a vague test that passes without proving anything.

Opening the dialog

  1. Go to Test Features and press New test feature. On a brand-new project it opens by itself. You should see five ways to start:
    • Blank Gherkin file — a starter scenario you fill in.
    • Describe it — AI drafts it — plain English in, Gherkin out. Start here.
    • Record in browser — click through your site and let TestVibe draft from the recording.
    • Import from issue — needs Jira or GitHub connected in Settings → Connectors.
    • Import from document — PDF, Word, Excel, CSV, text or Markdown.
  2. Choose Describe it — AI drafts it. The dialog retitles to Describe your test and gives you a text box. You can also paste, drop or Attach image a screenshot or mockup.
  3. Press Draft with AI. You should land in the Gherkin editor with a draft in it.

Six rules for a good description

  • Start where the app starts. Home page, or login page. Do not open on a deep screen — say how you get there.
  • Name real things. "the Add to cart button", not "the relevant control".
  • State the exact values entered. Never "valid credentials".
  • End with something observable. A test with no assertion cannot fail, which makes it worse than no test.
  • No URLs, hosts or localhost. The runner is already pointed at your site; a literal address breaks against another environment.
  • One behaviour per test feature. Small features generate faster and fail more legibly.

One example, before and after

Test that login works properly.

No data (which account?), no observable outcome ("works properly" cannot fail), and no boundary (does login include forgotten-password? session expiry?). When it fails you will not be able to tell whether the test or the app was wrong.

The repair is mechanical — add the entry point, the data and the assertion:

Start at the login page and sign in with {{var:USERNAME}} and {{secret:PASSWORD}}. Open Reports from the main menu, set the date filter to "Last 30 days", and check the heading reads "Reports" and the results table has at least one row.

Names the entry point, names the controls, quotes the literal on-screen text, and asserts two independent things. Negative paths are worth as much as happy ones and generate fastest: error messages, empty states, validation, "no results found".

Check the draft before you generate

Reading the draft is far cheaper than reading a failed generation. Three checks:

  • Does the first step start at the landing page? If it begins inside the app, fix it here.
  • Are credentials tokens, not literals? You should see {{var:...}} and {{secret:...}} with the names you defined. An undefined token is flagged, and Generate stays disabled until you define it or remove it.
  • Does anything create data? That value must be unique per run or the second run collides with the first. Put {{unique}} inside it, for example casey+{{unique}}@example.com. Every {{unique}} in one run resolves to the same stamp, so a later step can log in with what it just created.

Save. The test feature should now show Ready to Generate.

The editor also has AI actions that tighten a draft in place — rough notes to Gherkin, adding edge cases, adding assertions. A few credits each, far cheaper than a wasted generation.

04

Generate the test

Press Generate. A drawer opens and stays open for a few minutes. Here is what is happening behind it.

The three phases

The drawer narrates activity rather than dumping a console. It loops back to phase 2 whenever a check fails.

  1. Exploring the app. An agent opens your Base URL in a real Chromium in an isolated cloud sandbox and probes it — logging in, opening menus, reading the controls your app renders. It uses what it already knows about this project: your notes, facts earlier sessions learned, and patterns from tests already generated here.
  2. Writing the test. One Playwright spec file, one test per Gherkin Scenario, using role-and-name locators against the controls it just saw.
  3. Verifying · run 1, 2, 3… It executes the spec through the same harness a published run uses. Red sends it back to phase 2. The last attempt is Final verification.
Why this matters Verification is a real run, not the AI marking its own homework. A test feature only reaches Ready to Test after the harness ran the finished spec and it passed. A timeout, an empty scenario body, or a shortcut that only worked because the app was already warmed up is downgraded to an honest failure — even if the verification technically went green.

How long it takes

WhatExpectNotes
A typical success around 6 minutes Measured across real projects, half finish inside about six minutes.
A heavy one up to ~25 minutes Large enterprise UIs, many scenarios, or several verify-and-fix laps.
The ceiling 90 minutes A cap, not a target — a four-minute session still bills four minutes. Adjustable per project in Settings → AI Model.

You do not have to sit there. The drawer offers Run in background. Generation runs server-side, so closing the drawer, navigating away, reloading, or signing in from another machine all pick the session back up; only Cancel cancels. Good use of the wait: write your next two test features, which queue and generate one after another.

A generation can pause to ask you something. If the agent decides your Gherkin cannot be satisfied as written — a step naming a control that does not exist — it stops and asks instead of inventing a test around the problem. The feature shows Needs your answer. Answering starts a fresh generation with the agreed wording.

When it finishes

  • Success. The header reads Generation complete, the feature moves to Ready to Test, and the footer offers Run tests. A What the Assistant learned card lists anything durable it discovered — that knowledge is kept and reused.
  • Failure. Generation failed, with the reason at the top and the How this test was built log already expanded. If a spec was written but not proven, the header says Generation failed · test saved and the file is kept. The footer offers Retry generation and, when a trace was captured, Debug with AI.
  • Environmental causes are stated plainly — the site was unreachable, the fleet was at capacity, the workspace ran out of credits. None means your app or your Gherkin is wrong. Retry.

What was saved: one Playwright spec file plus a small sidecar mapping its steps. Read it any time on the feature's Code tab.

05

Run it

Running is cheap, fast and boring compared with generating. That is the point: generate once, run forever.

Starting a run

  1. From the test feature, press Run. (From a just-finished generation drawer, Run tests does the same.) The run composer opens.
  2. Check the four sections. Defaults are usually right:
    • Environment — which target to run against. Your Base URL is the default.
    • Configurations — which Playwright configuration to run under.
    • ExecutionAuto (recommended), Sequential — one at a time, or a custom concurrency. Leave it on Auto.
    • Test Features — which tests are in scope. Pre-ticked.
    The line under the title does the arithmetic: N test features × M configs = K test jobs.
  3. Press Start Run. You should land on the run page, which updates live.

If TestVibe cannot reach the target from where tests execute, it tells you before dispatching and offers to fix the connection, run anyway, or cancel. Nothing is spent on a run that was never going to connect.

What you see while it runs

The phase banner walks through Queued — waiting for a runnerAllocating a cloud test sessionRunning tests. Then scenarios report individually: Pending, Running, then Passed, Failed or Skipped. Tiles above count scenarios, running, queued and passed as they land.

Queued is normal, not stuck. Each workspace limits how many runs execute at once; over that, work waits its turn, and waiting is not billed.
06

Read the result

The most valuable skill in this product. A green run takes ten seconds to read. A red one takes a few minutes, and the question it answers is: is my app broken, or is my test wrong?

Anatomy of a run page

A header with the outcome badge, the environment and who triggered it; five tiles; a tab strip; then the scenario tree.

TileReads
StatusSuccess, Failure, In progress, Queued, Cancelled, Timed out or Startup failure.
ScenariosHow many ran, and the pass rate.
DurationWall clock, with start and end times.
CreditsWhat this run cost.
SummaryThe one-line verdict — All green, N failing, or N skipped.

The tabs are Test Features · Images · Videos · Network · Console · Artifacts · Server · Report. The first is the scenario tree; start there. Watch the Server tab: it grows a red dot when the app under test threw or restarted during this run, and that dot is one of the strongest signals you will get all day.

Even on a green run, open one passing scenario. Look at its Final screenshot. That is how you catch a test that passed for the wrong reason — it asserted something true on a page you did not expect it to be on. Also check the scenario count: four scenarios in the feature but three in the run means one was skipped.

Reading a failure

  1. Start in the tree. Failures are grouped by test feature and highlighted, each group carrying a failed count. Above 20 scenarios you also get a filter row — All · Failed · Passed · Skipped.
    • The shape of the failure is itself information. One scenario out of forty: probably a real, specific defect. Every scenario in one feature failing at the same early step: something shared broke — the login, a navigation path, a fixture. Everything in the run failing: look at the environment first.
  2. Open the failing scenario. A drawer slides in with a Steps timeline split into Background and Scenario.
  3. Read the steps. Each row is the Gherkin step in plain language with its own tick or cross. The last green step tells you how far your app really got. The failed row is already expanded and shows the exact Playwright calls, with the failing line marked.
  4. Read the error. Under Error is the assertion message — usually "expected X, received Y" or "waited N ms for element". Internal stack frames are hidden; Copy puts the complete trace on your clipboard.
  5. Look at the picture. Scroll down to the Final screenshot — the page as it was when the test gave up. Nine times out of ten this alone answers it. Below it sit the Video and the Artifacts list.

The Playwright trace

A trace is captured for every scenario, passing or failing: a complete, replayable recording of what the browser did. It holds a timeline of every action with a snapshot of the page before, during and after — real inspectable pages, not screenshots — plus console output, network requests and the source line each action came from.

  • Opening it. On a passing or skipped scenario the drawer footer shows Open Playwright trace. On a failing one that button becomes Debug with AI, which opens the same viewer with an assistant docked beside it. Traces are also on the run's Artifacts tab.
  • The move that answers most questions. Click the failing action and look at the "before" snapshot. That is the page exactly as it was when the test tried to act. Was the button there? Covered by a cookie banner or a modal? Still a spinner? Was there an error message the test never mentioned?
If the trace will not load, suspect the network before the product. Traces are large files fetched by your browser from the artifact store. If your browser cannot reach it, the viewer comes up empty. That is an environment problem, not a bad trace.

Is my app broken, or is my test wrong?

Work down this table. The first row that matches usually settles it.

What you seeAlmost certainlyWhat to do
The Server tab has a red dot, or Console shows unhandled exceptions from your own scripts Your app It threw or restarted mid-run. Take the stack to your application logs.
Network tab shows 5xx on a request the failing step needed Your app The UI could not have worked. Fix the service, then re-run unchanged.
The final screenshot shows a real error state — a validation message, an error page, blank data Your app Reproduce it by hand at the same URL. If you can, you have a bug and a free reproduction.
Everything failed at the very first step, or there are no scenario results at all The environment The target was unreachable or served something unexpected. Check the URL on the run's environment chip.
The trace "before" snapshot shows the control is present but under a different name or role The test Your UI changed. Regenerate — section 07.
A timeout while the page was clearly still loading The test, usually It acted before the app was ready. Regeneration normally fixes it.
"Already exists" or a duplicate-value complaint The test It creates data with a fixed value and collided with its own previous run. Put {{unique}} in that value and regenerate.
The feature shows Out of date The test The Gherkin was edited after the spec was generated, so you ran an old test. Regenerate.
It passes when you run it again, unchanged Flakiness — either side Compare the two traces. Timing differences point at the test; different data or responses point at the app.
The Gherkin never described what your app is supposed to do The test The cheapest and most-missed check. Read the feature's Gherkin tab.
The check that beats all of them Try to do it by hand. Open the same environment URL and perform the steps the trace shows. If it fails for you, it is your app. If it works for you, ask what the sandbox browser saw that you did not — and the trace's "before" snapshot answers that.

AI shortcuts on a run page

  • Ask AI — in the run header. Summarises the run, or explains why it failed. Good when there are many failures and you want the pattern before the detail.
  • Debug with AI — on a failing scenario. Opens the trace with an assistant docked beside it. This is repair 1 in section 07.
  • Report tab — a written report of the run, with failure screenshots, to paste into a ticket or a stand-up.
  • Comments — a rail on any run for a note, optionally pinned to one scenario. A pinned comment follows that scenario into later runs, so "we know about this one, it's the flaky search filter" stops being tribal knowledge.
Sometimes there is no scenario tree at all, only This run failed before any scenarios ran. The reason is on the card — an unusable target URL, a bundle problem, a setup hook that refused. Nothing was dispatched and no credits were spent. Use Re-run and Ask AI.
07

Fix it and run again

You have decided the test is wrong. Three repairs, and they differ by an order of magnitude in cost — so pick deliberately rather than reflexively regenerating.

Use whenDo thisCost
The test's mechanics were wrong — a locator that no longer matches, a timing assumption, an assertion that was too strict Open the failing scenario, press Debug with AI, and describe the problem to the assistant beside the trace. It can propose a change to the spec, to the Gherkin, or a source pull request. It shows you the diff first. Cheapest
The test described the wrong behaviour, or your UI changed Edit the feature's Gherkin tab and save. It should now show Out of date. Press Regenerate. Full generation
The Gherkin is right and the app simply moved on Press Regenerate in the failing scenario's drawer. Same operation, same cost, same drawer as regenerating the feature. Full generation
Out of date does not always cost a regeneration. TestVibe classifies what changed. Comment, tag and whitespace edits, and renaming a feature or scenario without touching a step, are reconciled for free — the badge clears with no AI spend. Only a real change to the steps (added, removed, reordered, or reworded, such as "clicks Save" to "clicks Submit") needs a real regeneration.
The one rule worth internalising Do not run while a generation for that test feature is in flight. Until the generation finishes writing the new spec, the file on disk is still the old one, so a run started now executes the previous test and means nothing. TestVibe blocks this and the button tells you to wait.

Running it again

  • Re-run test feature — in the scenario drawer. Opens the composer with that test feature and this run's configuration preselected. Runs are dispatched per test feature, not per scenario, which is why the label says so.
  • Re-run — in the run header. Repeats the whole run.
  • Both go through Start Run, so you get one more chance to change the environment before anything is spent.

Loop until green. Then the feature's Runs tab shows the history for that one test, and its History tab shows who changed it, when, and which lines.

08

Where to go next

You have one passing test. Everything below multiplies it, roughly in order of value.

More tests, faster

Ask the Assistant: "Explore my app and suggest tests". It drives your site and proposes test features with a rationale for each, to Accept or Dismiss in Test Features. Nothing is generated or run without you asking.

Find what you are not testing

App Code links your application's repository (read-only) and ranks its user-facing areas untested → thin → covered, each with a shortcut into generating a test. It also makes later generations smarter, because the agent can read your source.

Run them without being asked

Automations turns a trigger — a schedule, or a run finishing — into an action: run features, run a load test, file an issue. Turn on per-automation AI triage and a failed nightly run arrives with a root cause attached.

Tell TestVibe what it cannot see

Settings → Notes is a short list of durable, selector-free facts about your app — a login quirk, how navigation is structured, a screen that is slow for a known reason — injected into every future generation. Five good notes measurably improve every test written afterwards.

Drive it from your terminal and CI

Create a key in Settings → CLI & API keys — it is shown once — then:

shell
npm install -g testvibe

testvibe login --server https://your-testvibe --key tvb_...
testvibe use my-project

testvibe features list --status generated
testvibe run Login --wait
testvibe runs list --status failed

testvibe verify --git --wait maps your changed files to the tests that cover them and runs exactly those — the natural pull-request gate. The same package runs as an MCP server (testvibe mcp) so AI coding tools can drive it.

The rest, when you want it

  • Load Testing — replay your functional journeys as virtual users, or drive protocol-level traffic, with thresholds and live throughput.
  • Settings → Connectors — Jira, GitHub, GitLab, Azure DevOps. A failed run then gets a file-an-issue action, with deduplication.
  • Settings → Environments — run the same suite against staging, preview and production-like targets.
  • Settings → Test Files Sync — mirror your features and specs into a Git repository.
  • Settings → AI Model — the model, and the generation timeout ceiling.
  • Plugins — extra help for particular UI frameworks.
  • Knowledge Base — turn your test features into end-user help articles.

The habit that makes all of it work: describe one behaviour at a time, insist on an assertion, and read the trace before you blame anything.