Web Checker — Test Suite

Test Suite monitors run standard Playwright Test files to verify functional user flows — login, search, checkout, multi-page navigation. Designed for scenario testing, not page speed. The platform runs npx playwright test on schedule and alerts you when tests fail.

Write your tests with test() and expect(), run them locally with npx playwright test, then deploy the same directory to Oack. No custom API, no rewrites — the same tests run everywhere.

Example: PokéStore e2e tests

poke-store.oack.io is a demo Pokémon store with login, search, cart, and checkout flows. Source. The test suite lives alongside the frontend code:

tests/e2e/store.spec.ts
import { test, expect } from '@playwright/test';

async function loginAsAsh(page) {
  await page.goto('/login');
  await page.getByTestId('email-input').fill('ash@pokemon.com');
  await page.getByTestId('password-input').fill('pikachu123');
  await page.getByTestId('login-submit').click();
  await page.waitForURL(/\/store/);
}

test.describe('PokéStore', () => {
  test('should log in and see store', async ({ page }) => {
    await loginAsAsh(page);
    await expect(page.getByTestId('user-name')).toHaveText('Ash Ketchum');
  });

  test('should search Pokémon', async ({ page }) => {
    await loginAsAsh(page);
    await page.getByTestId('search-input').fill('pikachu');
    await expect(page.getByTestId('pokemon-name')).toContainText('Pikachu');
  });
});

Run locally

Terminal
cd web
npx playwright test

# 13 passed (24.1s)

Skip repetitive flags with .oackctl.env

Create a .oackctl.env file in your project root to avoid passing --team and --monitor on every command. oackctl auto-loads it from the current directory.

.oackctl.env
OACKCTL_TEAM=a98957b0-a129-4032-a2c4-d18ac8dd2287
OACKCTL_MONITOR=f190f477-48f7-46d7-a533-25ca3b1541e1

Now you can run commands without the flags:

Terminal
oackctl test --dir web
oackctl deploy --dir web

Every CLI flag maps to an OACKCTL_ env var: --teamOACKCTL_TEAM, --monitorOACKCTL_MONITOR, --pw-grepOACKCTL_PW_GREP, etc. Add .oackctl.env to your .gitignore if it contains team-specific IDs.

Test on Oack (one-off run)

Upload the same directory for a one-off test run on Oack's browser infrastructure. The result includes a full Playwright HTML report.

Terminal
oackctl test --team <TEAM> --monitor <MONITOR> --dir web

# Packaging web...
#   Files: 74 (112.7 KB)
#
# Running test...
#
# Result: PASSED
# Report: https://api-ru.oack.io/api/v1/artifacts/.../report/index.html

Deploy for continuous monitoring

Deploy the test suite to a browser monitor. It runs on schedule (e.g. every 5 minutes) and you get alerted when tests fail.

Terminal
oackctl deploy --team <TEAM> --monitor <MONITOR> --dir web

# Packaging web...
#   Files: 74 (112.7 KB)
#
# Uploading suite...
#   Suite: 112.7 KB
#   Tests: tests/e2e/store.spec.ts
#   Git:   8169f4ce (main)
#
# Deployed.
# Monitor: https://app-ru.oack.io/teams/.../monitors/...

What you get

  • Playwright HTML report — full test breakdown with screenshots, error details, and timing. Opens in your browser after each test run.
  • Pass/fail health status — any test failure = monitor DOWN. Alerts fire through your configured channels (email, Slack, PagerDuty, etc.).
  • Git metadata — each deploy records the commit SHA, branch, and who deployed. Visible in the dashboard.
  • Environment variables — pass credentials and config via --env flags or team-level secrets. Tests access them via process.env.
  • Filters — run a subset of tests with --pw-grep, --pw-project, or --pw-tag.

Multi-monitor config

For complex setups, define all check suites in a oack.config.json file:

oack.config.json
{
  "team": "<TEAM_ID>",
  "dir": "web",
  "checks": [
    {
      "name": "PokéStore Login",
      "pw_grep": "login"
    },
    {
      "name": "PokéStore Chromium Only",
      "pw_project": "chromium"
    },
    {
      "name": "PokéStore Critical Flows",
      "pw_tag": "critical"
    },
    {
      "name": "PokéStore Full Suite"
    }
  ]
}

The name field is the unique key — monitors are matched by name within the team. If a monitor with that name already exists, it's updated. If not, a new browser monitor is created automatically. Removing a check from the config does not delete the monitor — use oackctl monitors delete for that.

Filters narrow which tests each monitor runs:

  • pw_grep — match test names (--grep flag in Playwright)
  • pw_project — run a specific Playwright project (e.g. chromium, firefox)
  • pw_tag — filter by @tag annotation in test titles
Terminal
oackctl config-deploy --config oack.config.json

# Deploying 4 check suites...
#   PokéStore Login .............. created (monitor abc12345)
#   PokéStore Chromium Only ...... created (monitor bcd23456)
#   PokéStore Critical Flows ..... created (monitor cde34567)
#   PokéStore Full Suite ......... created (monitor def45678)
# Done.