DEV Community

TestDino
TestDino

Posted on

Mistake 3/14: You Run Every Test on Every PR

A developer pushes a button color change. CI triggers. Your full suite runs, including the complete checkout flow, destructive state tests, and edge cases that have nothing to do with the change. 45 minutes later, green check. Merge. Nobody questioned it.

The damage isn't just time. It's trust. Developers start ignoring CI results when feedback takes 45 minutes on a two-line change. Flaky failures get dismissed.Real failures get missed.

Test tagging fixes this.

BEFORE: No tags. Everything runs on every trigger.

test('add to cart', async ({ page }) => { /* ... */ });
test('complete purchase', async ({ page }) => { /* ... */ });
test('request refund', async ({ page }) => { /* ... */ });
Enter fullscreen mode Exit fullscreen mode

AFTER: Tagged. Filtered by when and where they should run.

test('add to cart', { tag: '@smoke' }, async ({ page }) => { /* ... */ });
test('complete purchase', { tag: '@regression' }, async ({ page }) => { /* ... */ });
test('request refund', { tag: '@destructive' }, async ({ page }) => { /* ... */ });

// PR pipeline:   npx playwright test --grep @smoke        → 4 min
// Nightly:       npx playwright test --grep @regression   → 45 min
// Isolated:      npx playwright test --grep @destructive  → runs alone
Enter fullscreen mode Exit fullscreen mode

@smoke: 20-30 critical tests. Every PR. Under 5 minutes. @regression: Full suite. Nightly. Catches everything without blocking anyone. @destructive: Modifies shared state. Isolated run. Doesn't pollute other results.

45 minutes down to 4. No infrastructure changes. Just tags.

Do you enforce a tagging strategy on your team, or is it a free-for-all? Drop it in the comments.

Top comments (0)