Test Data in a Distributed System
- by Davin Tryon
A question that has been vexing me lately has been about how to effectively test (end-to-end) features in a distributed system. Particuarly, how to effectively manage (through time) test data for feature testing.
The system in question is a typical SOA setup. The composition is done in JavaScript when call to several REST APIs. Each service is built as an independent block. Each service has some kind of persistent storage (SQL Server in most cases).
The main issue at the moment is how to approach test data when testing end-to-end features. Functional end-to-end testing occurs through the UI, and it is therefore necessary for test data to be set up before the test run (this could be manual or automated testing). As is typical in a distributed system, identifiers from one service are used as a link in another service. So, some level of synchronization needs to be present in the data to effectively test.
What is the best way to manage and set up this data after a successful deployment to a test environment?
For example, is it better to manage this test data inside each service? Or package it together with the testing suite? Does that testing suite exist as a separate project?
I'm interested in design guidance about how to store and manage this test data as the application features evolve.