Black-box tests
Test the real thing.

A real browser against the real app: no mocks, no hooks, no access to your source code. Scenarios that capture what your product does for customers, written as Playwright code you own.

01 · No mocks

Tests click, type, and read the screen against your deployed app, with its real backend, database, and third parties. They don't need your code, so they work for any stack.

UnitEmpirical
Imports codeyesno
Needs your repoyesno
Mocks networkoftennever
Runs againsta harnessyour URL

02 · Scenarios that matter

Each test is a product scenario: the inputs a customer gives and the outcome they pay for. A red test reads as a broken promise to a customer, not a broken function.

  • Guest checks out with a coupon code REVENUE
  • New user signs up with Google and lands on onboarding ACTIVATION
  • Admin invites a teammate who accepts from email EXPANSION
  • Customer downgrades plan and keeps their data RETENTION

03 · An asset for big changes

Rewrite the backend, swap the framework, move auth providers. The suite describes what users do, not how the code does it, so it stays put and tells you the change is safe to ship.

Suite · 212 tests

API · Node → Rust 0 changed

Vue → React 0 changed

REST → GraphQL 0 changed

Auth0 → Clerk 3 changed

04 · We ship tests as code

Every test is Playwright in TypeScript, in a git repo you can clone. Run it on your laptop or your CI with no Empirical in the loop. Leave whenever you like and keep the suite.

~/acme-tests — zsh
$ cat tests/checkout/coupon.spec.ts
test("guest checks out with a coupon code", async ({ page }) => {
  await page.getByLabel("Coupon").fill("WELCOME10");
  await page.getByRole("button", { name: "Pay now" }).click();
  await expect(page.getByText("Order confirmed")).toBeVisible();
});

$ npx playwright test
✓ 212 passed (4.1m)

Read our own suite on GitHub ↗