14 / 48 · 16 CI/CD Pipelines · Testing Pyramid in CI← prev⊞ allnext →☰ Read as one page
3.4Stage 3: On Merge to Main / Pre-Deploy (Minutes to Tens of Minutes)
This is the final validation before code reaches users. Run the expensive, thorough tests here.
What runs here:
- Full browser test suite across multiple browsers
- Visual regression tests (Playwright visual comparisons, Percy, Chromatic)
- Performance smoke tests (Lighthouse, k6 with basic thresholds)
- Accessibility audits (axe-core, Pa11y)
# Example: Cross-browser E2E tests with sharding
browser-tests:
needs: integration-tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
browser: [chromium, firefox, webkit]
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: 'npm'
- run: npm ci
- uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ hashFiles('package-lock.json') }}
- run: npx playwright install --with-deps ${{ matrix.browser }}
- run: npx playwright test --project=${{ matrix.browser }} --shard=${{ matrix.shard }}/4
- uses: actions/upload-artifact@v4
if: failure()
with:
name: traces-${{ matrix.browser }}-${{ matrix.shard }}
path: test-results/
Target time: Under 20 minutes with parallelization. Without sharding, browser tests easily take 45+ minutes.