QA Strategy for microservices with Synchronous and Asynchronous communication
The initial objective of this project was to further study the differences in the development and implementation of quality strategies for microservices with synchronous and asynchronous communication. I decided to do all the development of the application and the tests from scratch to be able to better observe some details in practice.
To run it locally, you have two options:
The docker-compose file contains the pre-requisites to run the application: MongoDB and Kafka
It’s also necessary to generate some dependencies jars from the modules:
mvn clean install
Now, you can bring up the docker-compose:
docker-compose up -d
Or you can also run each application module individually:
Run Inventory:
mvn -f inventory/ spring-boot:run
Run Shop:
mvn -f shop/ spring-boot:run
Run Shipment:
mvn -f shipment/ spring-boot:run
This repository includes 2 pipelines.
This project contains contract tests using Pact. You need to setup your PactFlow account in order to use it.
PS: Be aware of some environment variables you may need to run some of the commands below and also the pipeline:
Besides the CI configuration where the tests are configured to run. You can also run them locally. You need first to also set some of the variables mentioned above.
Then you can go to the producer module and execute the contract tests, to generate the contracts. The pact files will be
written in the target/pact folder. It is configured to automatically publish the pacts into the pact broker.
mvn -f {folder}/ -Dtest=**/contract/*ConsumerPact test
If you want to manually publish the pacts into the pact broker, you can execute the following command:
mvn pact:publish
Then you can run the contract tests in the provider side, where it is already configured to get it from the pact broker
mvn -f {folder}/ -Dtest=**/contract/*ProviderPact test
Install and activate Intellij plugin to format on IDE:
There is a swagger documentation configured for each module. After running the desired module, you can navigate
to: http://localhost:{port}/swagger-ui/
mvn spotless::check (in the sub-module directory)
mvn spotless::apply (in the sub-module directory)