Currently we have 15+ microservices separated in their own repository and each one of them holds their unitary and integration tests, which are run when a new commit is made.
We also have two clients that use our microservices, a website and a mobile app. Each one of them in their own repository.
At the moment we do not have any acceptance tests.
Then the following question came to my mind: if I release a new version of our
user service, all its corresponding unitary and integration tests will be run (create, update, remove and the like).
Now I want to have our acceptance tests run, let's say I want my user to successfully place an order, the steps would be somewhat as follows:
- Create user
- Place order
- Process payment
- Order placed
- (Happy user)
Those tests must reside within the
users repository or should I create an entirely independent repository that executes those steps everytime a new commit is made, to any of my services?
For instance, let's say I make a new commit to
coupon service, the test I mentioned before wouldn't be run, but then I could have broken something that only the acceptance tests in the
customer service would have caught, this is why I'm thinking I should have one separate repository, call it a AcceptanceTestProject, containing all these acceptance tests (or at least the most important ones) that would be run everytime a commit would be made.
Currently I think I should have this separate repository only with acceptance tests as part of my pipeline, so it would be run, no matter what microservice is being updated.
But please correct my thought if I'm missing something.
The pipeline would be something like:
- unit tests(user service)
- integration tests(user service)
- acceptance tests (separate application)