consumer-driven contracts - entwicklertag · consumer-driven contracts markus knittig @mknittig....

41
Consumer-Driven Contracts Markus Knittig @mknittig

Upload: others

Post on 04-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Consumer-Driven ContractsMarkus Knittig

@mknittig

Page 2: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Agenda

● Fundamentals● How CDC works● What CDC can do and not do

Page 3: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Service-oriented Architecture

Page 4: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Microservices

Page 5: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Microservices Architecture

Page 6: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Service Consumer

Page 7: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Service Provider

Page 8: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture
Page 9: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Provider Contracts

● Document schemas● Interfaces● Conversations● Policy● Quality of service characteristics

Page 10: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

… and Consumer Contracts?

Page 11: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Consumer-Driven

Page 12: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Contracts

Page 13: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact and Spring Cloud Contractsto the rescue!

Page 14: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Example with Spring Cloud Contracts

Page 15: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Example with Pactanimal_service.given("an alligator named Mary exists").

upon_receiving("a request for an alligator").

with(

method: "get",

path: "/alligators/Mary",

headers: {"Accept" => "application/json"}).

will_respond_with(

status: 200,

headers: {"Content-Type" => "application/json"},

body: {

name: "Mary",

dateOfBirth: Pact.term(

generate: "02/11/2013",

matcher: /\d{2}\/\d{2}\/\d{4}/)

})

Page 16: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Overview with Spring Cloud Contracts

Page 17: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Consumer view with Pact

Page 18: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Provider view with Pact

Page 19: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Should I use Pact or Spring Cloud Contracts?

Page 20: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Simple: Use Spring Cloud Contracts if you want to test Spring (Boot) projects

(you can consume Pact files too)

Page 21: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact Implementations

Page 22: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Share contracts

Page 23: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact Broker

● Matrix of compatible consumer/provider versions ● Tagging of Pact versions e.g. “production”,

“feature-branch”● Hooks when Pact changes e.g. run provider verifications● Provider verification results● Diffs between Pact versions● And some more...

Page 24: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact Broker Index

Page 25: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact Broker Contract Details

Page 26: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Pact Broker Dependency Graph

Page 27: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

(Possible) CDC Flow

Page 28: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Contract Tests vs Functional Tests

Page 29: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture
Page 30: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Consumer-Driven Contracts

Page 31: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Given "there is no user called Mary"

When "creating a user with username Mary"

POST /users { "username": "mary", email: "...", ... }

Then

Expected Response is 200 OK

Page 32: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Given "there is already a user called Mary"

When "creating a user with username Mary"

POST /users { "username": "mary", email: "...", ... }

Then

Expected Response is 409 Conflict

Page 33: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

When "creating a user with a username with 21 characters"

POST /users { "username": "thisisalooongusername", email: "...",... }

Then

Expected Response is 400 Bad Request

Expected Response body is { "error": "username cannot be more than 20

characters" }

Page 34: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

When "creating a user with a username containing numbers"

POST /users { "username": "us3rn4me", email: "...", ... }

Then

Expected Response is 400 Bad Request

Expected Response body is { "error": "username can only contain

letters" }

Page 35: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Given that username "bad_username" is invalid

When "creating a user with an invalid username"

POST /users { "username": "bad_username", ... }

Then

Response is 400 Bad Request

Response body is { "error": "<any string>" }

Page 36: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

CDC vs. Swagger

Page 37: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

CDC vs. JSON Schema

Page 38: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Where CDC can help ● Good tool for communication about

interfaces between consumer and provider● Simple structure / naming / type checks in

request / response on lower test level● Simple stubs for the consumer which can be

used to use consumer even if the real implementation is missing

Page 39: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Do not use CDC...● ...to replace end-to-end / system tests. “We

have CDC! Why does integration break?” ● ...to test business logic. “For this request I

expect two offerings, for this request one..”● ...to test (master) data. “I need to ensure all

different currencies are supported.”● … to test cross-cutting concerns like security,

token handling etc.

Page 40: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

CDC Users

Page 41: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture

Thank you for your attention!Questions and comments are welcome

Markus Knittig@mknittig