Difference between system testing and end-to-end testing

What is end-to-end testing, and what is the difference between it and system testing?

They both seem the same and check the application as a whole. Definitions on the net are very confusing.


For me there isn't really a huge difference between the two and in some establishments the terms could be used interchangeably. Everywhere is different. I would try and explain it like so:

System testing: You're testing the whole system i.e. all of it's components to ensure that each is functioning as intended. This is more from a functional side to check against requirements.

End to end testing: This is more about the actual flow through a system in a more realistic end user scenario. Can a user navigate the application as expected and does it work. You're testing the workflow.

For example if you were to test an e-commerce site the shop front:

System test: browsing for items, cart and checkout would all work fine.

End to end test: You may then find issues with the workflow of moving between these areas of functionality.


End-to-end testing - An end-to-end test is basically exactly what it sounds like; you are testing a piece of software from beginning to end. If it is an ecommerce platform, for example, you would test that you can get to a product page, add it to cart, then checkout and complete the order. For an application, it could be that you are able to select an item from a menu, do some work, and then submit that so that it is visible to others. It's basically just a way for a functional team to vet the new development and make sure that they haven't broken something either on the front-end or back-end during implementation.

System test - This is a bit more nebulous. This could be someone testing the back-end database of a website, or testing the front-end UI or even the middle-tier. It's basically a siloed test with a (mostly) narrow focus, designed to make sure that the individual components of a service follow the requirements that are usually laid out prior to development work being done. This can also be called 'integration testing'.