Skip to content

Dileep17/pact

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repo set for spiking on PACT with java 8, springboot and Junit5

Picked below from PACT

Contract testing is a technique for testing an integration point by checking each application in isolation to ensure the messages it sends or receives conform to a shared understanding that is documented in a "contract".

Pact is a code-first tool for testing HTTP and message integrations using contract tests.

Pact broker

Run $docker-compose up to bring up pact broker. This should be done before running pact consumer & producer tests. Access pact ui @ http://localhost:9292/ credentials are hardcoded in docker-compose file: webadmin/password@312

Consumer :- order service

Has following endpoints 1. /getOrder -> fetches product information from productservice for product with id 1 & 2 (hardcoded) and returns order

Consumer contract tests are in ProductServiceContractTest.

To run tests run following command in productservice folder

$ mvn clean test 

This will generate pact contract files @ /orderservice/target/pacts/*.json

To push pact contracts to Pact Broker use below. Make sure pact broker is up before publishing.

$ mvn pact:publish -Dpact.consumer.tags=test

tags can be changed based on need. Pact broker url and credentials are configured on pom.xml @ au.com.dius.pact.provider:maven plugin

To start service

 $ mvn spring-boot:run

Producer :- product service

Has following endpoints 1. /product/new -> used to setup data 2. /product/search/name/{name} -> returns list of products with matching name 3. /product/search/id/{id} -> returns product with id

ProductServiceApplication creates two products at boot time.

ContractTest class contains producer contract tests (auto generated by TestTemplate based on pact files). Pact files are downloaded from pact broker. Pact broker information such as url, credentials etc are set as attributes on ContractTest class.

To run tests run following command in productservice folder

$ mvn clean test

If pact files are not picked from pact broker, copy the pact files generated by consumer contract tests (orderservice and web) into productservice/pacts folder manually. @PactFolder on ContractTest class maps the location of pact contract files.

To start service

 $ mvn spring-boot:run

Consumer :- web

This is a simple React project which depends on product service. user can search for product by name in UI and matching products will be displayed

Run npm start in web folder to start UI

Run npm run contracttests to run contract tests. Pact contract files will be generated in /web/pacts/*.json

Todo

* pact mock multiple producers in a contract test
* auto update consumer contract versions and producer to run tests against a specific version
* update pack broker with test results (pass/fail examples)
* check out https://docs.pact.io/pact_broker/can_i_deploy/

About

spiking on PACT for contract testing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages