Files
Charon/docs/testing/README.md
2026-01-27 04:53:38 +00:00

7.4 KiB

E2E Testing & Debugging Guide

Quick Navigation

Getting Started with E2E Tests

  • Running Tests: npm run e2e
  • All Browsers: npm run e2e:all
  • Headed Mode: npm run e2e:headed

Debugging Features

This project includes comprehensive debugging enhancements for Playwright E2E tests.

📚 Documentation

🛠️ VS Code Debug Tasks

Five new debug tasks are available in VS Code:

  1. Test: E2E Playwright (Debug Mode - Full Traces)

    • Interactive debugging with Playwright Inspector
    • Full trace capture during execution
    • Best for: Step-by-step test analysis
  2. Test: E2E Playwright (Debug with Logging)

    • Enhanced console output with timing
    • Network activity logging
    • Best for: Understanding test flow without interactive mode
  3. Test: E2E Playwright (Trace Inspector)

    • Opens recorded trace files in Playwright Trace Viewer
    • Best for: Analyzing traces from previous test runs
  4. Test: E2E Playwright - View Coverage Report

    • Opens E2E code coverage in browser
    • Best for: Analyzing test coverage metrics
  5. Test: E2E Playwright - View Report (existing)

    • Opens HTML test report
    • Best for: Quick results overview

📊 Debugging Utilities Available

Debug Logger (tests/utils/debug-logger.ts)

const logger = new DebugLogger('test-name');
logger.step('Action description');
logger.network({ method, url, status, elapsedMs });
logger.assertion('Expected behavior', passed);
logger.error('Error context', error);

Network Interceptor (tests/fixtures/network.ts)

const interceptor = createNetworkInterceptor(page, logger);
// ... test runs ...
const csv = interceptor.exportCSV();

Test Step Helpers (tests/utils/test-steps.ts)

await testStep('Describe action', async () => {
  // test code
}, { logger });

await testAssert('Check result', assertion, logger);

🔍 Common Debugging Tasks

See test output with colors:

npm run e2e

Run specific test with debug mode:

npm run e2e -- --grep="test name"

Run with full debug logging:

DEBUG=charon:*,charon-test:* npm run e2e

View test report:

npx playwright show-report

Inspect a trace file:

npx playwright show-trace test-results/[test-name]/trace.zip

📋 CI Features

When tests run in CI/CD:

  • Per-shard summaries with timing for parallel tracking
  • Failure categorization (timeout, assertion, network)
  • Slowest tests automatically highlighted (>5s)
  • Job summary with links to artifacts
  • Enhanced logs for debugging CI failures

🎯 Key Features

Feature Purpose File
Debug Logger Structured logging with timing tests/utils/debug-logger.ts
Network Interceptor HTTP request/response capture tests/fixtures/network.ts
Test Helpers Step and assertion logging tests/utils/test-steps.ts
Reporter Failure analysis and statistics tests/reporters/debug-reporter.ts
Global Setup Enhanced initialization logging tests/global-setup.ts
Config Trace/video/screenshot setup playwright.config.js
Tasks VS Code debug commands .vscode/tasks.json
CI Workflow Per-shard logging and summaries .github/workflows/e2e-tests.yml

📈 Output Examples

Local Test Run:

├─ Navigate to home page
├─ Click login button (234ms)
   ✅ POST https://api.example.com/login [200] 342ms
   ✓ click "[role='button']" 45ms
   ✓ Assert: Button is visible

Test Summary:

╔════════════════════════════════════════════════════════════╗
║              E2E Test Execution Summary                      ║
╠════════════════════════════════════════════════════════════╣
║ Total Tests:        150                                     ║
║ ✅ Passed:          145 (96%)                               ║
║ ❌ Failed:          5                                       ║
║ ⏭️  Skipped:         0                                       ║
╚════════════════════════════════════════════════════════════╝

🚀 Performance Analysis

Slow tests (>5s) are automatically reported:

⏱️  Slow Tests (>5s):
1. Complex test name           12.43s
2. Another slow test            8.92s
3. Network-heavy test           6.15s

Failures are categorized:

🔍 Failure Analysis by Type:
timeout      │ ████░░░░░░░░░░░░░░░░░ 2/5 (40%)
assertion    │ ██░░░░░░░░░░░░░░░░░░  2/5 (40%)
network      │ ░░░░░░░░░░░░░░░░░░░░  1/5 (20%)

📦 What's Captured

  • Videos: Recorded on failure (Visual debugging)
  • Traces: Full interaction traces (Network, DOM, Console)
  • Screenshots: On failure only
  • Network Logs: CSV export of all HTTP traffic
  • Docker Logs: Application logs on failure

🔧 Configuration

Environment variables for debugging:

DEBUG=charon:*,charon-test:*    # Enable debug logging
PLAYWRIGHT_DEBUG=1               # Playwright debug mode
PLAYWRIGHT_BASE_URL=...          # Override application URL
CI_LOG_LEVEL=verbose             # CI log level

📖 Additional Resources


File Structure

docs/testing/
├── README.md                           # This file
├── debugging-guide.md                  # Complete debugging guide
└── DEBUGGING_IMPLEMENTATION.md         # Implementation details

tests/
├── utils/
│   ├── debug-logger.ts                 # Core logging utility
│   └── test-steps.ts                   # Step/assertion helpers
├── fixtures/
│   └── network.ts                      # Network interceptor
└── reporters/
    └── debug-reporter.ts               # Custom Playwright reporter

.vscode/
└── tasks.json                          # Updated with 4 new debug tasks

playwright.config.js                    # Updated with trace/video config

.github/workflows/
└── e2e-tests.yml                       # Enhanced with per-shard logging

Total Implementation: 2,144 lines of new code and documentation Status: Complete and ready to use Date: January 27, 2026