End-to-End Testing

End-to-end (E2E) testing checks a complete user journey, from its first step to its final outcome, through every system it touches: the user interface, the back-end services and database, and external systems such as a payment provider or an email service. The ISTQB glossary describes it as testing business processes from start to finish under production-like conditions.

Example: in an online store, one E2E test signs in as a customer, buys two products with a test card in the payment provider's sandbox, and confirms that the order is saved as paid, the confirmation email arrives, the warehouse receives the order and the customer finally sees it as shipped. Each system may have passed its own tests; the E2E test asks whether they work together for the user.

Why it matters

Many serious failures live between systems, not inside them: the order is paid, but the warehouse is never told. Every component and API can pass its own tests while the customer still cannot complete a purchase. Only a test that follows the whole journey sees what the user sees.

For the business, critical journeys such as sign-up, checkout and payment are where failures cost revenue and trust directly. For the tester, E2E tests give the strongest evidence that a release is usable, and they are also the most expensive tests to build and keep running. Deciding what deserves an E2E test is a core skill.

What an end-to-end test covers

An E2E test is defined by a journey, not by a screen or a component. It starts where the user starts and ends where the user's goal is reached and visible: the order shipped, the money in the other account. Its real value is in the checks at the hand-offs, where the journey passes from one system to the next.

  • Start and end: one actor, one goal, and a final outcome that can be checked.
  • Systems: front end, back-end services, database, message queues and third-party services, with your own systems in the versions you plan to release.
  • Checkpoints: the state after each hand-off, such as the order status, the payment reference or the email that was sent.

End-to-end testing vs system testing

In the ISTQB Foundation syllabus, system testing is a test level that focuses on the overall behaviour and capabilities of one whole system, often including functional testing of end-to-end tasks inside it. Parts it depends on may be simulated, and the interfaces with other systems and external services are the focus of a separate level, system integration testing. The ISTQB glossary calls end-to-end testing a test type, not a test level: its scope is set by a business process, which crosses every system involved, including systems your team does not own.

The two overlap, and E2E tests often run during system, system integration or acceptance testing. Some teams call any automated browser test "E2E", even one that covers a single page with the back end mocked; when you hear the term, ask what was real and what was simulated.

  • Scope: one complete system, versus one business journey wherever it goes.
  • Neighbouring systems: may be simulated in system testing; real, or the closest available equivalent such as a provider's sandbox, in E2E testing.
  • Typical defects: wrong behaviour inside the system, versus broken hand-offs, mismatched data formats and missing steps between systems.

Worked example: an online order from cart to shipment

An online store has a web shop (front end and order service) built by your team, a payment provider in test mode, a warehouse system run by another team, and an email service. The journey: a registered customer buys two products and the order ships. One order number connects every check.

One E2E test follows a single order through the web shop, the payment provider's sandbox, the confirmation email and the warehouse system, with a check at every hand-off.
  • Customer browser
  • Web shop front end + order service
  • Payment provider test mode (sandbox)
  • Warehouse system another team
  1. 1 From Customer To Web shop: Sign in, add 2 × A and 1 × B to the cart Check 1: subtotal 190.00 SAR
  2. 2 From Customer To Web shop: Check out, pay with the provider's test card
  3. 3 From Web shop To Payment provider: Authorise the payment 190.00 SAR
  4. 4 From Payment provider To Web shop: Approved + payment reference reply
  5. 5 From Web shop To Customer: Confirmation page reply Check 2: an order number is shown
  6. 6 Web shop internally: Save the order as PAID, reduce stock Check 3: payment reference stored; stock A 8, B 2
  7. 7 From Web shop To Customer: Confirmation email reply Check 4: same order number in the test inbox
  8. 8 From Web shop To Warehouse system: Send the order for picking Check 5: the warehouse has the same 3 items
  9. 9 From Warehouse system To Web shop: Shipped + tracking number reply Step 6: marked as shipped in the warehouse system
  10. 10 From Web shop To Customer: Order page shows "Shipped" reply Check 6: status and tracking number visible

Outcome: Each check reads the state after a hand-off, so the first failing check points to the system or connection where the journey broke.

  • Checks 3 to 6 in the test case below are what make it end to end: each one reads the state on the other side of a hand-off (payment to order service, order service to email, order service to warehouse, warehouse back to the web shop). With checks 1 and 2 alone, the test would only show what the customer's screen says.
  • If check 5 fails while check 3 passes, suspect the hand-off from the order service to the warehouse, and record both observations in the bug report.
E2E-01  Registered customer buys two products and the order ships

Preconditions:
- customer e2e.0412@example.com exists and is verified
- product A (75.00 SAR, stock 10) and product B (40.00 SAR, stock 3)
  exist in the web shop and in the warehouse system
- payment provider in test mode
- outgoing email from the test environment goes to a test inbox

Steps and checks:
1. Sign in, add 2 x A and 1 x B to the cart.
   Check: subtotal 190.00 SAR.
2. Check out and pay with the provider's test card for an approved payment.
   Check: the confirmation page shows an order number.
3. Check: the order service has the order as PAID with the payment reference;
   stock of A is 8, stock of B is 2.
4. Check: the confirmation email with the same order number is in the test inbox.
5. Check: the warehouse system has received the order with the same 3 items.
6. In the warehouse system, mark the order as shipped.
   Check: the customer's order page shows "Shipped" and a tracking number.

Try it: User Story → Test Scenarios

Why E2E tests should be few

E2E tests sit at the top of the test pyramid, a model described in the ISTQB syllabus and in "The Practical Test Pyramid" on martinfowler.com. The pyramid pictures a healthy test suite: many small, fast, isolated tests at the bottom (component tests), fewer integration tests in the middle and only a few E2E tests at the top; models count and name the layers differently. The higher a test sits, the more it covers per run, and the slower, less isolated and costlier to maintain it is. When an E2E test fails, the cause can be in any system it passed through.

So test each rule at the lowest level where it can be tested, and keep a small set of E2E tests for the journeys that matter most to the business.

  • Choose by risk: a journey earns an E2E test when its failure would stop users reaching an important goal or would cost money.
  • Cover the main path plus the few alternatives that matter, such as a declined payment.
  • When an E2E test finds a defect that no lower-level test caught, add a faster lower-level test for it, such as a component or API test, instead of more E2E tests.

Try it: Risk-Based Test Generator

Test data and environment challenges

Much of the effort in E2E testing goes into data and environments. The data must be consistent in several systems at once, and every run changes it: stock goes down and orders pile up. The environment must contain every system in compatible versions; shared environments are often busy or one version behind, and third-party sandboxes can be slow or unavailable.

  • Create the data each test needs, with unique values per run such as a new customer email, instead of reusing records that others change.
  • For payments, use the provider's sandbox and its published test cards; never real cards or real customer data.
  • Wait for a condition, such as the email having arrived, with a time limit; never for a fixed number of seconds.
  • Before reporting a failure, check that the environment was healthy: a sandbox outage is not a product defect.

Try it: Test Data Factory Try it: Temporary Email

Common mistakes

  • Putting every check into E2E tests: field validation, price rules and error messages are cheaper and more reliable at lower levels.
  • Calling a test "end to end" while the back end or a key integration is mocked, without saying so in the test report.
  • Checking only the last screen: the customer sees "Order confirmed" while the warehouse never received the order.
  • Depending on shared, pre-existing data that other people or earlier runs change.
  • Using fixed waits for emails and messages: too long makes tests slow, too short makes them flaky.

The QA perspective

On a real team the tester usually keeps the list of critical journeys, with the systems and teams each one crosses. Agree on it with the product owner, who knows what matters to the business, and with the teams that control environments, sandboxes and test accounts. Journeys are often run manually first, during system or acceptance testing; the stable, high-value ones are then automated in the pipeline.

For each run, record the systems and versions involved, what was real and what was simulated, the test data, and the checkpoint where a failure occurred. Comparing the evidence at each checkpoint turns a vague "checkout is broken" into a defect the right team can fix.

Practice exercise

Design an E2E test for a clinic booking journey

Your task

A clinic app lets a patient book an appointment. The journey crosses the mobile app and booking service (your team), a doctor scheduling system (another team), a payment provider in test mode for a 50.00 SAR fee, and an SMS provider that sends the confirmation.

Write one E2E test case for the main journey with a check at every hand-off, list the test data and environment you need, and name two checks that do not belong in this test.

Steps
  1. Write the journey in one sentence: actor, goal, final outcome.
  2. List the systems and the hand-offs between them.
  3. Write the steps with a check after each hand-off.
  4. List the data and environment needs, and the non-product reasons the test could fail.
Show the model answer
Model answer

Journey: a registered patient books a free slot with a chosen doctor, pays the 50.00 SAR fee and receives a confirmation SMS; the slot is then no longer offered to others.

Steps: 1) Sign in, choose the doctor and a free slot. 2) Pay with the provider's test card; check that the booking service stores the booking as CONFIRMED with the payment reference. 3) Check that the scheduling system shows the slot as booked for this patient. 4) Check that the SMS provider's test log shows the confirmation with the same booking number. 5) As a second test patient, check that the slot is not offered.

Data and environment: a new test patient with a unique phone number per run, a doctor with free slots created for the test, and agreed access to the scheduling system and the SMS test log. Non-product reasons the test could fail: no free slots left by earlier runs, an SMS slower than the wait limit, a sandbox outage.

Not in this test: the phone number format check (component or API level) and the refund rule for cancellations (a system test of the booking service with a simulated payment provider).

Frequently asked questions

Is end-to-end testing the same as UI test automation?

No. E2E describes the scope of a test: a complete journey across systems. UI automation describes a technique: driving the user interface with a tool. Many automated E2E tests drive the UI, but an E2E test can also be run manually, and many UI tests are not end to end because they cover one page with the back end mocked.

Do E2E tests run in production?

Normally they run in a production-like test environment, because they create orders, payments and messages. Some teams run a few carefully designed journeys in production, clearly marked as synthetic, to monitor the system after a deployment. That needs explicit agreement from the product owner and operations, and never uses real customer data or real payments.

How many E2E tests does a product need?

There is no correct number. Start from the list of critical journeys and cover each with a test for the main path and only the most important alternatives. If the E2E suite is slow or often fails for environment reasons, move checks down to lower levels instead of adding more E2E tests.

References

Practise with Mutqan tools

Score features by likelihood and impact, then generate a prioritised risk-based test plan.

Test Design

One-stop factory for synthetic test data: users, customers, companies, addresses, numbers, dates and strings in JSON, CSV, SQL or XML.

Test Data

Generate a throwaway email address and read what arrives, on the same page. The address is released when you stop using it.

Utilities New

Go deeper

Your progress on this topic

Part of the QA Roadmap