End-to-end testing
End-to-end (E2E) tests exercise an entire user journey across the full stack — UI, API, database, external services — as a real user would. The dominant tools are Playwright, Cypress, and Selenium for web; Detox and Appium for mobile. E2E tests give the strongest guarantee that the system works as a whole; they pay for it with execution speed and flakiness.
E2E tests' value is highest on the critical journeys — checkout, signup, login — where any regression is catastrophic. Their cost is highest in maintenance: UI changes break selectors, async timing causes flakes, third-party dependencies introduce non-determinism. The pragmatic ratio (test pyramid) puts E2E at the top: a small number, focused on critical paths, run on every release. Anti-patterns: testing every feature E2E (slow, flaky, expensive); using E2E to catch bugs that unit or integration tests should catch; ignoring flakes ('it'll pass next run') until the suite is meaningless. Healthy E2E discipline: zero-tolerance for flakes; deterministic test data; isolation between tests.
Related terms
- Integration test
An integration test verifies that multiple components work together correctly — a service hitting a real database, two microservices communicating, a frontend talking to a real API.
- Contract testing
Contract testing verifies that two services communicate correctly without requiring both to be deployed for the test.
- Regression test
A regression test verifies that previously working functionality still works after a code change.