Problem: How does one do end-to-end (user story) testing of a system based on microservices.
- Break the user story down into the individual service calls and test those, a form of boundary testing.
- Use an approach like Netflix's FIT (Failure Injection Testing) for testing with live services but instructing them to return specific values or even errors.
- Use PACT to test that services use each other correctly and respect their contracts.
Also discussed was how to map the dependency graph of collaborating services. Tools like Zipkin (Twitter) and Slalom (Netflix), both based on Google's Dapper paper, map the dependencies between services by sampling edge-service calls and mapping all of their downstream service calls.
The final consensus was that end-to-end testing of such systems is probably not possible, much less feasible. Microservices being what they are, small, well-defined services, changes to them are also liable to be small and well defined, making rolling back easier in case these changes do cause problems. Ultimately this means you're probably testing in a production environment or something very close to it.