create-regression-test
Creates a regression or smoke test spec file for a Playwright E2E test suite. Generates the spec file, test data JSON, and fixture updates. Handles complete test scaffolding including beforeAll cleanup, POM usage, and parallel-safe data. Use when asked to write a regression test, smoke test, or E2E test for a feature.
How do I install this agent skill?
npx skills add https://github.com/agentmantis/test-skills --skill create-regression-testIs this agent skill safe to install?
- Gen Agent Trust Hubwarn
The skill generates and executes Playwright test files based on a user-provided feature name. A security risk exists where a maliciously crafted feature name could lead to command injection when the skill runs the generated test using the shell. It also performs dynamic code execution by writing and then running test scripts, which requires monitoring.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
Create Regression / Smoke Test
Generate a complete test spec with associated test data and fixture integration.
Workflow
- Determine the feature name from the user's request
- Determine the suite — regression (default) or smoke
- Check if a POM exists in
e2e/poms/{feature}.page.ts- If yes, read its public methods and JSDoc to understand available actions
- If no, create one first using the
create-pomskill
- Check if test data exists in
e2e/test-data/{feature}.json- If yes, read and use the existing data shape
- If no, create the JSON file with template data
- Check fixtures in
e2e/fixtures/base.ts- If the feature is not yet registered, add the interface and loader
- Create the spec file in the appropriate directory
- Run the test to verify it passes:
npx playwright test --project="chromium:regression" {feature}.spec.ts
Spec File Structure
Every spec follows this exact pattern:
import { test } from '../../fixtures/base';
import { getAuthFilePath } from '../../helpers/env-config';
import { FeaturePage } from '../../poms/feature.page';
const authFile = getAuthFilePath();
test.describe('Feature Name Tests', () => {
// One-time setup: clean stale data from previous failed runs
test.beforeAll(async ({ browser }) => {
const context = await browser.newContext({
storageState: authFile,
});
const page = await context.newPage();
const pom = new FeaturePage(page);
await pom.setUp();
await page.close();
await context.close();
});
test('should create a new item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[0];
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.verifyItemExists(item.name);
});
test('should edit an existing item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[0];
const updated = testData.feature.updatedItem;
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.editItem(item.name, updated.name, updated.value);
await pom.verifyItemExists(updated.name);
});
test('should delete an item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[1];
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.deleteItem(item.name);
await pom.verifyItemNotExists(item.name);
});
});
Critical Rules
No Raw Page Calls in Specs
A spec must NEVER call page.getByRole(), page.locator(), page.waitForTimeout(), or any raw Playwright page method. All interaction goes through the POM.
Only acceptable uses of page in a spec:
- Passing it to the POM constructor:
new FeaturePage(page) - Creating contexts in
beforeAll:browser.newContext()/context.newPage()
Test Independence
- Every test navigates independently via
pom.navigateToPage() - Every test creates its own data — never rely on data from another test
- Tests run in parallel — use unique-suffixed test data to avoid collisions
Custom Test Import
Always import test from the project's custom fixtures:
// CORRECT
import { test } from '../../fixtures/base';
// WRONG — loses access to testData fixture
import { test } from '@playwright/test';
Test Data
JSON File: e2e/test-data/{feature}.json
{
"items": [
{ "name": "ItemA", "key": "keyA", "value": "some-value" },
{ "name": "ItemB", "key": "keyB", "value": "other-value" }
],
"updatedItem": { "name": "Updated", "value": "new-value" }
}
Rules
- Never hardcode data in spec or POM files
- All string values get unique suffixes automatically via the testData fixture
- Shape the data to match what the POM methods expect as parameters
See references/spec-template.md and references/test-data-template.md for full templates.
beforeAll Cleanup Pattern
The beforeAll block must:
- Create a new browser context manually (not from the test's page fixture)
- Load
storageStatefor authentication - Instantiate the POM and call
setUp() - Close the page and context when done
This ensures stale data from previous failed runs is cleaned before any test executes.
File Checklist
When creating a regression/smoke test, you should produce:
-
e2e/poms/{feature}.page.ts— POM (create or update) -
e2e/test-data/{feature}.json— Test data -
e2e/fixtures/base.ts— Updated with feature interface and loader (if new feature) -
e2e/tests/regression/{feature}.spec.ts(ortests/smoke/) — Spec file - All tests are independent and parallel-safe
- No raw
pagecalls in the spec - No hardcoded test data
- Tests pass on chromium:
npx playwright test --project="chromium:regression" {feature}.spec.ts
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/agentmantis/test-skills/create-regression-test">View create-regression-test on skillZs</a>