Docs
20.2-Integration-E2E-Testing
20.2 Integration & E2E Testing
Overview
Integration and End-to-End (E2E) testing verify that different parts of your application work together correctly. While unit tests focus on isolated components, integration tests check how components interact, and E2E tests validate entire user workflows.
Learning Objectives
By the end of this section, you'll understand:
- β’Difference between unit, integration, and E2E testing
- β’Writing effective integration tests
- β’E2E testing strategies and tools
- β’Testing API endpoints
- β’Database testing patterns
- β’Browser automation testing
Testing Pyramid
β²
/β\
/ β \ Fewer E2E tests (slow, expensive)
/ β \ Full system validation
/ E2Eβ \
/ββββββββββ\
/ β \ More integration tests
/ Integβ \ Component interaction
/ββββββββββββββββ\
/ β \
/ Unit Tests \ More unit tests (fast, cheap)
/ββββββββββββββββββββββ\ Isolated functionality
βΌβββββββββββββΌββββββββββββΌ
Speed: Fast βββββββββββββββββΊ Slow
Cost: Low ββββββββββββββββββΊ High
Coverage: Component ββββββββββββΊ System
Testing Levels Comparison
| Aspect | Unit Tests | Integration Tests | E2E Tests |
|---|---|---|---|
| Scope | Single function/class | Multiple components | Entire application |
| Speed | Very fast (ms) | Medium (seconds) | Slow (minutes) |
| Dependencies | Mocked | Some real, some mocked | All real |
| Maintenance | Low | Medium | High |
| Confidence | Component works | Components integrate | System works |
| Debugging | Easy | Moderate | Difficult |
| Flakiness | Low | Medium | Higher |
Integration Testing
What to Test
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Integration Testing β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββ βββββββββββ βββββββββββ β
β β Service β βββββββΊ β Service β βββββββΊ β Service β β
β β A β β B β β C β β
β βββββββββββ βββββββββββ βββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Database β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Test Points: β
β βββ Service A β Service B communication β
β βββ Service B β Database operations β
β βββ API endpoint β Service β Response β
β βββ Event flow through multiple services β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Integration Test Patterns
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Integration Test Patterns β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Bottom-Up Integration β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββ Start here, move up β β
β β β DB β βββββββββββββββββββββββ β β
β β ββββ²βββ β β
β β β β β
β β ββββ΄βββ Then test this layer β β
β β β DAL β βββββββββββββββββββββββ β β
β β ββββ²βββ β β
β β β β β
β β ββββ΄βββ Finally test this β β
β β β API β βββββββββββββββββββββββ β β
β β βββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. Top-Down Integration β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββ Start here, move down β β
β β β UI β βββββββββββββββββββββββ (with stubs) β β
β β ββββ¬βββ β β
β β βΌ β β
β β βββββββ Replace stubs progressively β β
β β β API β βββββββββββββββββββββββ β β
β β ββββ¬βββ β β
β β βΌ β β
β β βββββββ Until all real β β
β β β DB β βββββββββββββββββββββββ β β
β β βββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
E2E Testing Flow
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β E2E Test Scenario β
β "User Checkout Flow" β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β Visit ββββΊβ Login ββββΊβAdd Item ββββΊβCheckout β β
β β Site β β β βto Cart β β β β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β β
β βββββββββββββββββββββββββ β
β βΌ β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β βComplete βββββ Payment βββββShipping βββββ Review β β
β β β β Info β β Info β β Cart β β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Verify: β β
β β β Order confirmation displayed β β
β β β Email sent β β
β β β Inventory updated β β
β β β Payment processed β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
API Testing Patterns
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API Testing Approach β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Request Response Validation β
β βββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β POST /api/users β β Status: 201 Created β β
β β Headers: β β Headers: β β
β β Content-Type: json ββββββββΊβ Content-Type: json β β
β β Body: β β Body: β β
β β { name: "John" } β β { id: 1, name: ... } β β
β βββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β
β Test Categories: β
β βββ Happy Path: Valid inputs, expected success β
β βββ Error Cases: Invalid inputs, proper error handling β
β βββ Edge Cases: Boundary values, empty inputs β
β βββ Security: Authentication, authorization β
β βββ Performance: Response time, load handling β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Browser Automation
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser Automation Tools β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Test Runner β β
β β (Playwright / Puppeteer) β β
β ββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Browser Instance β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Page β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β DOM Elements β β β β
β β β β ββββββββββ ββββββββββ ββββββββββ β β β β
β β β β β Button β β Input β β Form β β β β β
β β β β ββββββββββ ββββββββββ ββββββββββ β β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β β β
β β β Actions: click, type, select, wait, assert β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Capabilities: β
β βββ Navigate to URLs β
β βββ Interact with elements β
β βββ Take screenshots β
β βββ Record videos β
β βββ Network interception β
β βββ Multi-browser support β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test Data Management
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Test Data Strategies β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Fixtures (Static Test Data) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β fixtures/ β β
β β users.json β Static user data β β
β β products.json β Static product data β β
β β orders.json β Static order data β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. Factories (Dynamic Data Generation) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β const user = UserFactory.create({ β β
β β name: 'John', β β
β β role: 'admin' β β
β β }); β β
β β // Creates unique user with defaults + overrides β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 3. Seeding (Database Population) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β beforeAll β seed database with test data β β
β β afterAll β clean up / reset database β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 4. Transactions (Isolation) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β beforeEach β start transaction β β
β β test β make changes β β
β β afterEach β rollback transaction β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test Environment Architecture
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Test Environments β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Development Staging Production β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β β β β β β β
β β Unit β β Integr- β β E2E β β
β β Tests β β ation β β Tests β β
β β β β Tests β β (Smoke) β β
β β β β β β β β
β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β Local β β Test β β Prod β β
β β DB β β DB β β DB β β
β β (Mock) β β (Real) β β (Real) β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β
β CI/CD Pipeline: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Push β Unit β Integration β Deploy Staging β E2E β β
β β β Tests Tests β Deploy Prod β Smoke β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
E2E Test Best Practices
| Practice | Description | Example |
|---|---|---|
| Page Objects | Encapsulate page interactions | loginPage.login(user, pass) |
| Stable Selectors | Use data-testid attributes | [data-testid="submit-btn"] |
| Explicit Waits | Wait for specific conditions | await page.waitForSelector() |
| Retry Logic | Handle flaky tests | { retries: 2 } |
| Test Isolation | Each test independent | Fresh state per test |
| Parallel Execution | Run tests concurrently | Reduce total time |
| Visual Regression | Compare screenshots | Catch UI changes |
Key Takeaways
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Testing Strategy β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β Use testing pyramid - more unit, fewer E2E β
β β Integration tests catch component interaction bugs β
β β E2E tests validate critical user journeys β
β β Use appropriate tools for each testing level β
β β Manage test data effectively β
β β Make tests reliable (not flaky) β
β β Run tests in CI/CD pipeline β
β β
β Balance: Confidence vs Speed vs Maintenance Cost β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Navigation
- β’Previous: 20.1 Unit Testing Fundamentals
- β’Next: 20.3 Mocking & Test Doubles