System Testing and “End-to-End” Testing can be very similar but typically the difference is that with System Testing you are exercising the functionality of your application with how it interfaces with other components (applications) in your environment. An example of this is with data feeds, your app may send a data file/feed to another application in your system. In Functional testing testers will either use a “stub” for the interface, or they will just capture the data file/feed and verify its content but not actually send it to the other application. But in System Testing you want to verify that the app will successfully connect and pass the data file to the other system, and that the other system can open it up and process the data.
End-to-End Testing is when you take a process from the very beginning all the way to the end – like accepting an order from a customer and then processing that order all the way through full filment, accounting and shipping. This is basically exercising an entire “workflow”. Although System Testing is similar, in System Testing you do not have to complete the entire workflow but may exercise individual interfaces one at a time. However by the end of System Testing most test environments will exercise (or should exercise) an entire end-to-end test.
System Testing and End-to-End Testing is very important in your testing efforts and where lots of defects appear because a lot of testers do not take processes all the way through to other systems. The biggest challenge with this type of testing is that you really need a complete system in your QA environment.