Software Quality.com

end-to-end testing

By Alexander S. Gillis

What is end-to-end testing?

End-to-end (E2E) testing is a software testing methodology that verifies the working order of a software product in a start-to-finish process. End-to-end testing verifies that all components of a system can run under real-world scenarios.

The goal of this form of testing is to simulate a user experience from start to finish. E2E testing can find software dependencies while also validating the system under test, its data integrity and integrations.

End-to-end testing is typically performed by quality assurance (QA) teams, and are executed in dedicated test environments. This normally takes place after functional and system testing. End-to-end testing starts from the user's perspective, simulating typical operations the application can perform.

Types of end-to-end testing

There are two types of end-to-end testing: horizontal and vertical.

Horizontal end-to-end testing is the most used and well-known approach. Horizontal testing can build confidence in a system by assuming the perspective of a user. Horizontal testing confirms whether a user can navigate through a system, if it works as expected and if there are any unexpected bugs or exceptions.

Vertical end-to-end testing refers to testing in layers, meaning tests happen in a sequential, hierarchal order. Each component of a system or product is tested from start to finish ensuring quality. Vertical testing is frequently used to test critical components of a complex computing system that do not typically involve users or interfaces. A layer without a user interface (UI) would benefit from vertical end-to-end testing over horizontal.

Why use end-to-end testing?

All forms of end-to-end testing simulate real-world scenarios, like the interaction with hardware, networks and databases. End-to-end testing assumes the advantages of white and black box testing.

White box testing closely aligns with vertical end-to-end testing and examines the inner workings of a program or system. Black box testing is comparable to horizontal end-to-end testing and focuses on functionality without examining the internal working structures of a program or system.

The goal of simulating real-world situations from a user perspective helps ensure that software applications are working as they were intended to. It ensures data flow across processes is consistent, discovers system dependencies and validates system integrations.

How to perform end-to-end testing

End-to-end testing is applied differently depending on what software is tested. In an e-commerce web application, for example, horizontal end-to-end testing may include signing into a profile, using search and browse functionalities, adding an item to a cart, saving the item for later, buying an item, logging shipping and credit card information, confirming the purchase and signing out.

By comparison, vertical end-to-end testing would be used in a system where there is no UI, or the UI has a high technical skill cap. For example, it would work to test an application program interface or Structured Query Language interface.

Before testing, designers and developers construct a list of what UI or other functions they need to perform. Data flow should be tracked from system to system to find dependencies, flaws or inaccuracies. Conditions should be prepared before testing, including factors that may change any interface options such as latency or traffic.

End-to-end testing is typically conducted on finished products and systems, which makes each review a test of the completed system and how it communicates with its parts. If the system output is not what is expected, or a problem or issue is found, it is tested a second time. Data is recorded and analyzed to determine the issue's origin, and then it is fixed and re-tested.

Metrics to use in end-to-end testing

Metrics commonly used in end-to-end testing typically include the following:

End-to-end testing best practices

Best practices to follow when performing end-to-end practices include the following:

End-to-end testing vs. other software testing

Software testing involves smaller tests performed at a faster pace -- only relying on methodologies such as end-to-end testing for final integration and pre-release evaluation.

Unit testing

At the bottom of the pyramid, the beginning of development for each system is unit testing. This form of testing addresses smaller pieces of the system or code and is ultimately faster and more efficient than end-to-end testing. If a bug is found in the overall system of an end-to-end test, it could be anywhere in the system. But if a bug is found in a unit test, far less time is needed to find and correct the problem.

Key differences between E2E and unit tests include the following:

Integration tests

The middle section of the Testing Pyramid is integration, which tests how multiple units operate together with a proper flow of information. Integration testing is similar to vertical end-to-end testing in that it tests the underlying framework of the user interface.

Key differences between E2E and integration tests include:

End-to-end tests

The final and top portion of the Testing Pyramid involves end-to-end testing -- also known as UI testing – in which the entire system is tested. If time is spent efficiently, most tests should be unit tests, followed by integration tests and then end-to-end testing.

End-to-end testing vs. system testing

System testing is a process in which QA teams evaluate how the various components of an application interact together in the full, integrated system or application.

System testing verifies that an application performs tasks as designed. With system testing, a QA team gauges if an application meets all its requirements, which include technical, business and functional requirements.

System tests are like end-to-end tests in that they are performed on software as a whole, but they have distinct differences that make them their own form of testing. These differences include the following:

End-to-end testing vs. functional testing

In functional testing, each software function or feature is compared with an organization's specifications to ensure the software provides the output required by the user or business. If a system passes functional testing, it can be verified for release. Functional testing confirms the application meets customer requirements since the process tries to closely reflect the true experience of a user.

End-to-end tests are like functional testing in that they consider the user experience. However, differences between the two include the following:

Benefits of end-to-end testing

Potential benefits to end-to-end testing include the following:

Challenges of end-to-end testing

For all the strengths that come with end-to-end testing, it does have its challenges. These include the following:

Software test engineers can still choose to use end-to-end testing, but the practice can be supplanted by other testing methodologies, such as automated sanity checks.

Learn more about E2E and other software testing methods like unit, integration, system and acceptance tests.

09 Mar 2023

All Rights Reserved, Copyright 2006 - 2024, TechTarget | Read our Privacy Statement