2.5 KiB
2.5 KiB
End-to-End Tests
Purpose
End-to-end (E2E) tests validate complete workflows and system behavior from a user's perspective. These tests ensure that all components work together correctly in realistic scenarios.
Characteristics
- Scope: Complete workflows involving multiple components
- Speed: Slow (minutes) - most expensive tests to run
- Frequency: Run before releases, not on every commit
- Coverage: Focus on critical user journeys and system integration
When to Write E2E Tests
Write E2E tests when:
- Testing complete user workflows (e.g., data ingestion → analysis → report generation)
- Validating system behavior across multiple components
- Ensuring critical paths work in production-like environments
- Testing deployment and configuration scenarios
Guidelines
- Keep them minimal: E2E tests are expensive - focus on critical paths
- Use realistic data: Test with data that resembles production scenarios
- Test user journeys: Validate complete workflows, not individual components
- Clean up properly: Ensure tests clean up resources (files, DB entries, etc.)
- Make them independent: Each test should be runnable in isolation
- Document scenarios: Clearly describe what user journey is being tested
Running E2E Tests
# Run all e2e tests
pytest tests/e2e/ -m e2e
# Run specific e2e test
pytest tests/e2e/test_workflow.py -m e2e
# Run with verbose output
pytest tests/e2e/ -m e2e -v
Directory Structure
tests/e2e/
├── __init__.py # Package initialization
├── conftest.py # E2E-specific fixtures
├── README.md # This file
└── test_*.py # E2E test files
Example E2E Test
import pytest
pytestmark = pytest.mark.e2e
def test_complete_data_workflow(e2e_environment):
"""
Test complete workflow: data ingestion → analysis → report.
This test validates the entire user journey from fetching market data
to generating a trading report.
"""
# Arrange: Set up data source
# Act: Execute complete workflow
# Assert: Validate final report output
pass
Test Pyramid
E2E tests sit at the top of the testing pyramid:
/\ E2E Tests (few, slow, expensive)
/ \
/Int \ Integration Tests (some, medium speed)
/______\
/ Unit \ Unit Tests (many, fast, cheap)
/__________\
Most of your tests should be fast unit tests. Use E2E tests sparingly for critical paths.