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:
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
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_TEAM=a98957b0-a129-4032-a2c4-d18ac8dd2287
OACKCTL_MONITOR=f190f477-48f7-46d7-a533-25ca3b1541e1 Now you can run commands without the flags:
oackctl test --dir web
oackctl deploy --dir web
Every CLI flag maps to an OACKCTL_ env var:
--team → OACKCTL_TEAM,
--monitor → OACKCTL_MONITOR,
--pw-grep → OACKCTL_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.
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.
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
--envflags or team-level secrets. Tests access them viaprocess.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:
{
"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 (--grepflag in Playwright)pw_project— run a specific Playwright project (e.g.chromium,firefox)pw_tag— filter by@tagannotation in test titles
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.