coffee-testing
coffee-testing copied to clipboard
Code examples for effective enterprise testing
= Effective Testing & Test Automation
Some projects for my presentations on effective enterprise testing.
The example projects contain a coffee-shop application, which uses the coffee-shop-db database, and a barista application.
== Running
You run the environment, containing the coffee-shop, barista applications and the coffee-shop-db using Docker containers.
In order to run the Docker containers locally, you need to create a Docker network first: +
docker network create --subnet=192.168.42.0/24 dkrnet
Then you can build the coffee-shop project and run the environment as follows:
[source,bash]
./local-build.sh ./local-run-env.sh
You can access the coffee-shop application using HTTP, after the applications have been started:
[source,bash]
curl localhost:8001/ curl localhost:8001/orders
You create new coffee orders by POST-ing the JSON representation of a new order:
[source,bash]
curl localhost:8001/orders -i
-XPOST
-H 'Content-Type: application/json'
-d '{"type":"Espresso","origin":"Colombia"}'
INFO: To stop and clean up the containers again, run: docker stop coffee-shop barista coffee-shop-db
== Running the tests
You run the non-integration tests by executing mvn test
, or mvn package
(any goal that executes Maven's test
phase).
You run the integration tests by executing mvn test-compile failsafe:integration-test failsafe:verify
.
You can run the systems tests either in a Kubernetes environment or using plain Docker containers.
=== System tests on local Docker containers
You run the system test environment by executing:
[source,bash]
./systemtest-run-env.sh
This starts up the coffee-shop application, the coffee-shop-db database, and a barista mock server.
The system tests contained in coffee-shop-st/
will run against that deployed environment:
[source,bash]
cd coffee-shop-st/ mvn verify
INFO: To stop and clean up the system test containers again, run: docker stop coffee-shop barista coffee-shop-db
=== System tests with Quarkus dev mode
The system test environment with Docker containers also works with the Quarkus remote-dev
mode where we can see our code changes immediately being reflected in the running coffee-shop
application.
You run the system test environment with dev mode by executing:
[source,bash]
./systemtest-run-dev-env.sh
You can run the system tests like in the description before, and also you can change the sources under coffee-shop/
and see the changes being reflected in the running coffee-shop application.
=== System tests on Kubernetes
In order to run the system tests in Kubernetes & Istio you need to apply the systemtest
Kubernetes resources: kubectl apply -f coffee-shop/deployment/systemtest/
.
The files assume that you have Istio installed on your cluster.
You can point your integration & system tests to the remote environment using the following system variables:
- for the smoke integration tests:
[source,bash]
cd coffee-shop/
mvn test-compile failsafe:integration-test failsafe:verify
-Dcoffee-shop.test.host=1.2.3.4
-Dcoffee-shop.test.port=80
- for the system tests:
[source,bash]
cd coffee-shop-st/
mvn verify
-Dcoffee-shop.test.host=1.2.3.4
-Dcoffee-shop.test.port=80
-Dbarista.test.host=1.2.3.4
-Dbarista.test.port=80
== Further resources
- https://blog.sebastian-daschner.com/entries/efficient-testing-video-course[Efficient enterprise testing (video course)^]
- https://blog.sebastian-daschner.com/entries/thoughts-on-efficient-testing[Efficient enterprise testing (article series)^]
- https://blog.sebastian-daschner.com/entries/tests-that-spark-flow-poem[Tests that spark flow — A poem^]