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
Intro
End-to-End Testing
End-to-end testing exercises a complete user journey through a running application. A test starts at a real entry point, such as a browser or mobile interface, crosses the same application boundaries used in production, and checks an observable result. A checkout test might sign in, add an item, submit payment through a controlled test integration, and confirm the resulting order.
The defining feature is scope. A unit test checks one small piece of code. A component test checks a larger unit behind a controlled boundary. An integration test checks that selected parts communicate. An end-to-end test follows a valuable path across the assembled system. The names overlap between teams, so document which boundaries each suite includes.
End-to-end tests answer a narrow but important question: can the assembled system complete this journey in this environment? They do not prove that every input, path, browser, or failure mode works. A small set of high-value journeys complements broader coverage at lower test levels.
The system under test
A web end-to-end test usually involves these parts:
- A test runner discovers cases, controls setup and teardown, evaluates assertions, and reports results.
- A browser driver or browser automation protocol sends navigation, input, and inspection commands to a browser.
- The application under test serves the user interface and processes the journey through its services.
- A test environment supplies configuration, databases, queues, identity, and controlled external dependencies.
- test data puts the environment into a known starting state.
- artifacts such as traces, screenshots, video, logs, and reports explain what happened.
The control path and application path are different. The runner tells the browser what a user would do. The browser sends normal application requests. The services change state and return responses. The runner then observes user-visible behavior or another approved boundary and compares it with the expected result.
This separation matters during diagnosis. A failed click may mean the locator found the wrong element, the element never became actionable, the browser could not reach the page, or the application did not render the control. The failure message alone rarely identifies the layer at fault.
Continue the course
This section is part of the paid course.
See pricing to subscribe, or log in if you already have access.
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
