Consumer-Driven Contract testing made simple with Pact (2/3)

Start Consumer-Driven Contract testing with Pact

What is Pact ?

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.

Pact provides a testing button for your code, allowing you to safely confirm that your applications will work together without having to deploy the world first.

It is available on a lot of platforms and languages :

Pact comes with its own specification regarding the format of the contracts between consumers and providers :

How can we implement a new service with Pact ?

Because we use a CDC approach we start with the consumer and here is what we want as a consumer :

As a consumer, I want a Rest API that returns “Hello world v1” when I GET “api/v1.0/helloworld”

1) Start with the consumer

Let’s implement a simple consumer by :

  • Writing Test(s)
  • Define interactions / Expectations

Concretely :

  • Build your client : here we call it consumer-js
  • Describe and configure the interactions (behaviors and expectations)

Once you have defined it you can run the tests. From those expectations Pact will create a contract file : a JSON file that will look like this :

2) Contract Driven Development

  • Design Your API From The Contract
  • Write a RED test

The RED test (in .NET Core)

The test will be launched and interactions will be verified based on the contract that has been defined on the consumer side.

Make the test GREEN

Features offered by Pact

In this simple example we have just checked a GET interaction with simple string matcher but you can achieve much more complex and more realistic verifications with the tool :

S.W.O.T

Based on our experience with Pact here is our S.W.O.T :

Resources

Please find the code samples in this repository : https://github.com/agilepartner/pact-sandbox

To go further check the implementation guide in your favorite language : https://docs.pact.io/implementation_guides

Conclusion

Pact is a really good tool to start a CDC approach. It is easy to use but there is one problem that needs to be solved before starting using it in enterprise :

Where the hell do we store the contracts ?

The answer is in this third article :

If you want to know more about CDC read this article :

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store