So, you've finished your project and all the unit tests pass. However, your project is a part of a larger system. This larger system will need to be tested to make sure that your code, and the other code it interfaces with, both work together as expected. Code tested in isolation can break when integrated into larger systems, and existing systems can break with the addition of new code, so it is important to perform E2E testing, also known as integration testing.
Integration testing is responsible for testing the complete program flow from beginning to end. Integration testing usually starts at the requirements gathering stage. You start by gathering and documenting the various requirements of the system. You then design all the components and devise tests for each subsystem, and then the E2E tests for the whole system. Then, you write your code according to the requirements and implement your own unit tests. Once your code is complete and the tests all...