Consumer Driven Contract Testing - Hosting A Mocked API Using Azure Functions

_ceder

Christian Eder

Posted on September 9, 2020

Consumer Driven Contract Testing - Hosting A Mocked API Using Azure Functions

Applying the concept of Consumer Driven Contract Testing is useful when you are building a system that is composed of multiple decoupled services. Some of these services will provide APIs, others will consume these APIs. Consumer Driven Contract Testing is about the API consumer publishing their expectations on the API in a way that allows

  • the provider of the API to verify that that it fulfils these expectations
  • the consumer of the API to easily stand up a mock of the provider API to run their own tests against

If you are not already familiar with the concept, you can dive deeper into the topic by reading Frank Rosner's excellent article or visit https://pact.io/. PACT is one of the major libraries available to implement Consumer Driven Contract Tests. The examples shown in this article however are based on the Impact library.

The basic idea is, that the consuming service defines a so called Pact that codifies the consumers expectations on the API structure & behavior:

The Pact shown in the example above defines an HTTP API that responds to any GET request to an URL with a path matching weatherforecast\/([a-zA-Z]+)\/(\d+) and responds with weather forecast data.

Based on this Pact, the consumer can stand up a test server on localhost and run tests of the consuming service using this mocked API:

After successfully running its own tests against this mocked API, the consumer can publish the PACT to the provider as a JSON file:

The provider can now take this JSON file and run the expectations defined in that file against its own API:

Hosting the mocked API on an Azure Function

If the consuming service does not want to run the mocked provider API on localhost - e.g. because it wants to run its own tests against a cloud hosted environment - we need a way to host the MockServer in the cloud as well. The following code snippet shows a fully working example of an Azure Function that will host an HTTP endpoint which will respond to any request as defined in the Pact:

You can find the whole example (and more) on my GitHub repo

💖 💪 🙅 🚩
_ceder
Christian Eder

Posted on September 9, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related