End-to-End Testing
End-to-end testing runs a complete user journey through a deployed application and its connected parts. It checks that the interfaces between the browser or client, services, data stores, and external dependencies produce the expected observable result.
itSoftware engineering | OpenSkills.info
Course pathWalk it in order
Look it upDip in anytime
Go furtherLeaves this page
Don't Panic
Don't Panic — End-to-End Testing
End-to-end testing follows one valuable user journey through a running application and the connected parts that make the journey real. It begins at an actual entry point, often a browser, and asks whether the assembled system reaches an observable result. In other words, it is the test that declines to accept that every component looked cheerful in isolation.
The useful idea is scope. A unit test checks local logic. An integration test checks selected collaborators. An end-to-end test crosses the browser, user interface, services, data stores, and chosen dependencies for a complete outcome. A checkout confirmation is valuable because a user needs the whole sequence, not a collection of individually well-behaved buttons.
That breadth is both the point and the bill. More moving parts mean slower setup, slower runs, and more places for a failure to hide. Keep many focused checks below this layer and reserve broad journeys for outcomes where several components must cooperate. One test that signs in, edits everything, buys everything, and then deletes everything is not a heroic journey. It is several arguments wearing one trench coat.
A dependable case has four parts: arrange known, isolated state; act through the realistic entry point; assert the smallest evidence that proves the outcome; and clean up what the environment will not discard. Unique users and records matter because parallel workers have no respect for an account named test-user. Stable locators and meaningful waits matter because a fixed delay is only a timetable for disappointment.
When a run fails, separate the control path from the application path. The runner tells the browser what to do; the browser sends the application’s requests. A missing confirmation can come from a locator, an unavailable environment, or a product defect. Start at the earliest divergence and retain the trace, screenshot, console output, failed requests, logs, browser, commit, environment, and test-data identity. A retry can collect evidence, but it does not erase the first failure.
Read the Intro for the full system and boundary decisions. Use Slides for the path from risk selection to diagnosis. Keep the Cheatsheet nearby when designing a case or sorting a failure. The Exercise turns the arrangement into one isolated, observable journey, which is where this topic stops being a diagram and starts acquiring opinions.
Where this skill leads
Relevant careers
See how this topic contributes to broader role-level skill maps.
Sources
- https://martinfowler.com/articles/practical-test-pyramid.html
Supports
- Test-level boundaries and the role of end-to-end and user-interface tests
- Keeping broad tests fewer than fast lower-level tests
- Test-double and service-boundary decisions
- https://playwright.dev/docs/best-practices
Supports
- Testing user-visible behavior
- Isolating cases and avoiding cascading failures
- User-facing locators, actionability, web-first assertions, and trace-based debugging
- https://playwright.dev/docs/actionability
Supports
- Visibility, stability, event-receiving, and enabled checks before actions
- Retrying assertions and bounded timeouts
- https://playwright.dev/docs/browser-contexts
Supports
- Per-test browser contexts and independent cookies, storage, and sessions
- https://playwright.dev/docs/test-retries
Supports
- Retry behavior and classification of flaky tests
- Preserving first-run failure information
- https://playwright.dev/docs/trace-viewer-intro
Supports
- Trace inspection of actions, DOM snapshots, source, console, errors, and network activity
- https://playwright.dev/docs/ci
Supports
- Continuous integration setup, workers, browser installation, and trace collection
- https://playwright.dev/docs/intro
Supports
- Playwright Test runner, assertions, isolation, parallelization, reporting, and supported browser engines
- Playwright product placement
- https://docs.cypress.io/app/core-concepts/testing-types
Supports
- Cypress end-to-end testing scope and complete application flows
- https://docs.cypress.io/app/core-concepts/test-isolation
Supports
- Independent test guidance
- Browser-page, cookie, local-storage, and session-storage reset behavior
- Risks of state leakage between cases
- https://docs.cypress.io/app/core-concepts/retry-ability
Supports
- Query and assertion retry behavior
- Timeout-based synchronization instead of arbitrary waits
- https://www.selenium.dev/documentation/webdriver/
Supports
- WebDriver browser control, waits, elements, interactions, Grid, and bidirectional capabilities
- Selenium product placement
- https://www.selenium.dev/documentation/test_practices/encouraged/
Supports
- Fresh browser state, independent tests, page objects, and suite design
- https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/
Supports
- Separating page-specific locators and behavior from test intent
- https://www.w3.org/TR/webdriver2/
Supports
- Remote control interfaces and protocol for user-agent interaction
- https://github.com/sindresorhus/awesome
Supports
- Starting index used to discover curated testing lists
- https://github.com/TheJambo/awesome-testing
Supports
- Discovery of playwright-bdd, Requestly, WireMock, and rrweb
- UI and end-to-end testing, service virtualization, browser utilities, and session replay categories
- https://vitalets.github.io/playwright-bdd/
Supports
- Gherkin, step definitions, Playwright fixtures, hooks, and reporting integration
- https://docs.requestly.com/
Supports
- Network interception, request and response modification, delay, and mocking
- https://wiremock.org/docs/
Supports
- HTTP service virtualization, stubbing, request matching, verification, and fault simulation
- https://www.rrweb.io/
Supports
- Browser session recording and replay from DOM and interaction events
- https://www.selenium.dev/history/
Supports
- Selenium's 2004 origin
- WebDriver development in 2006
- Selenium and WebDriver merger in 2008
- https://www.selenium.dev/blog/2011/selenium-2-0/
Supports
- Selenium 2.0 release date and stable multi-language WebDriver APIs
- https://www.cypress.io/blog/cypress-is-now-public-beta
Supports
- Cypress first commit date
- Cypress public beta and open-source release date and components
- https://www.w3.org/news/2018/webdriver-is-now-a-w3c-recommendation/
Supports
- WebDriver W3C Recommendation date
- Platform-neutral and language-neutral remote browser control protocol
- https://www.cypress.io/blog/cypress-is-officially-out-of-beta
Supports
- Cypress leaving beta, open-source runner, hosted service, and parallel execution
- https://github.com/microsoft/playwright/releases/tag/v1.0.0
Supports
- Playwright 1.0.0 release date and bundled Chromium, Firefox, and WebKit versions
- https://www.selenium.dev/blog/2021/announcing-selenium-4/
Supports
- Selenium 4.0.0 release date, stable API posture, rebuilt Grid, and distributed operation
- https://webdriver.io/docs/gettingstarted/
Supports
- WebdriverIO runner and web and mobile automation placement
- https://testcafe.io/documentation/402631/why-testcafe
Supports
- TestCafe browser control, selectors, assertions, automatic waiting, and no-WebDriver architecture
- https://appium.io/docs/en/latest/intro/
Supports
- Appium WebDriver-based automation across native, hybrid, and mobile web applications
- https://docs.maestro.dev/
Supports
- Maestro declarative mobile flows, local execution, cloud parallelism, and artifacts
- https://www.browserstack.com/automate
Supports
- BrowserStack hosted browser and device execution and product placement
- https://saucelabs.com/products/platform-for-test
Supports
- Sauce Labs browser, emulator, simulator, and real-device execution and artifacts
- https://www.lambdatest.com/
Supports
- LambdaTest hosted browser and device execution, parallelism, and reporting
- https://katalon.com/
Supports
- Katalon web, mobile, desktop, and API authoring, execution, and reporting placement
- https://testing.googleblog.com/2016/09/testing-on-toilet-what-makes-good-end.html
Supports
- End-to-end tests as costly broad checks that should cover important use cases
- Maintenance cost, debugging evidence, ephemeral test data, and dependency-double tradeoffs
- https://engineering.atspotify.com/2019/11/test-flakiness-methods-for-identifying-and-dealing-with-flaky-tests
Supports
- Flakiness costs confidence and CI time
- Result-pattern signals distinguishing flaky tests from infrastructure problems
- State, timing, and test-order causes of flakiness
- https://slack.engineering/balancing-safety-and-velocity-in-ci-cd-at-slack/
Supports
- Tiered pre-merge, post-merge, and regression placement for end-to-end tests
- The compounding effect of many individually low-flake suites
- https://slack.engineering/handling-flaky-tests-at-scale-auto-detection-suppression/
Supports
- Why result suppression can allow broken tests into the main branch
- Ownership and investigation requirements for flaky-test handling
