Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Pact is a contract testing tool. Contract testing is a way to ensure that services (such as an API provider and a client) can communicate with each other. Without contract testing, the only way to know that services can communicate is by using expensive and brittle integration tests.

Contract testing is immediately applicable anywhere where you have two services that need to communicate - such as an API client and a web front-end. Although a single client and a single service is a common use case, contract testing really shines in an environment with many services (as is common for a microservice architecture). Having well-formed contract tests makes it easy for developers to avoid version hell. Contract testing is the killer app for microservice development and deployment.

Pact is a consumer-driven contract testing tool. This means the contract is written as part of the consumer tests. A major advantage of this pattern is that only parts of the communication that are actually used by the consumer(s) get tested. This in turn means that any provider behaviour not used by current consumers is free to change without breaking tests.

Consumer testing

Consumer Pact tests operate on each interaction described earlier to say “assuming the provider returns the expected response for this request, does the consumer code correctly generate the request and handle the expected response?”.

...

  1. Using the Pact DSL, the expected request and response are registered with the mock service.

  2. The consumer test code fires a real request to a mock provider (created by the Pact framework).

  3. The mock provider compares the actual request with the expected request, and emits the expected response if the comparison is successful.

  4. The consumer test code confirms that the response was correctly understood

Provider testing

In contrast to the consumer tests, provider verification is entirely driven by the Pact framework. In provider verification, each request is sent to the provider, and the actual response it generates is compared with the minimal expected response described in the consumer test. Provider verification passes if each request generates a response that contains at least the data described in the minimal expected response.

...

Pact JVM - pact support for Java

pact-workshop-js

POC for contract testing with Okapi backend (Consumer)

...