Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and...

26
Pacts to the rescue! Making your microservices play nicely together with Consumer Driven Contracts Beth Skurrie @bethesque / @pact_up [email protected]

Transcript of Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and...

Page 1: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Pacts to the rescue! Making your microservices play nicely together

with Consumer Driven Contracts Beth Skurrie @bethesque / @pact_up [email protected]

Page 2: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

“Integrated tests are a scam. A self replicating virus that threatens the very health of your codebase, your sanity, and I'm not exaggerating when I say, your life.”

- JB Rainsberger

Page 3: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Integrated Tests: The Problems

●  Slow ●  Easy to break ●  Hard to fix ●  Scales combinatorially

3 classes, 4 code paths each 4 * 4 * 4 = 64 tests

Page 4: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

A B

mock

Test Symmetry… how it works

Page 5: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Test 1

Test 2

Test 3

Integrated tests

Page 6: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:
Page 7: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

●  Lack of automated tools ●  Relies on developer eternal vigilance ●  Does not scale

Test Symmetry: The Problem

Page 8: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Do we have the technology to achieve test symmetry?

Posed to Dius

Page 9: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

System Integration Tests: The WORST

●  Slower ●  Easier to break ●  Harder to fix ●  Scales BADLY ●  Lots of set up ●  Flakey ●  Extra infrastructure

Page 10: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Pact to the rescue!!!

Page 11: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

A B

mock

C P

pact

Pact… how it works

Page 12: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Problems with... Solved by Pact

Test symmetry ●  No automated tools ●  Relies on developer eternal

vigilance - not sustainable ●  Does not scale

Integrated tests ●  Slow ●  Easy to break ●  Hard to fix ●  Scales combinatorially

Test symmetry ●  Automatically enforced

Integrated tests ●  Fast ●  Low set up ●  Reliable ●  Easier to debug ●  Standalone CI build ●  No extra infrastructure ●  Scales linearly

Page 13: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Better API design!

Page 14: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Arrange - set up mock server

Page 15: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Arrange - set up expectations

Page 16: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Act and Assert

Page 17: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:
Page 18: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Set up provider

Page 19: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Set up test data

Consumer assumed:

Provider complies:

Page 20: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Verify: Success!

Page 21: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Support

●  JSON is language independent ●  Ruby ●  JVM (Java and Scala) ●  Validate against any running provider using either library ●  Pact specification ●  JS library next - volunteers anyone? ●  Janus ●  Shokkenki

Page 22: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

“How is it working for you?”

Before Pact ●  A “certification” environment that took 2 months to set up ●  Deploy all the things => deploy new thing => integration tests =>

pass ? deploy to production : try again ●  Does not scale

With Pact ●  40+ microservices using Pact ●  Green standalone CI builds ? deploy to production

Page 23: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Provider Consumer

In summary...

UI App Provid

er Client

API App DB

Integrated test

Test symmetry with Pact

Page 24: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Pact allows you to:

●  Combine the advantages of integrated tests and test symmetry ●  Mitigates the shortcomings of each method ●  Allows you to modify components with agility - quick feedback on

potential breakages ●  Have confidence that all the services in your system will work

together ●  Throw away your integration tests!!!

Page 25: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

Pact Makes your microservices play nicely together with Consumer Driven Contracts github.com/realestate-com-au/pact @pact_up Beth Skurrie [email protected] @bethesque

Page 26: Pacts to the rescue!€¦ · Arrange - set up mock server . Arrange - set up expectations . Act and Assert . Set up provider . Set up test data Consumer assumed: Provider complies:

P

publish pact latest pact?

tag “prod” pact

deploy script

prod pact?

C

Pact Broker