SlideShare a Scribd company logo
Pacts to the rescue! 
Making your microservices play nicely together ! 
with Consumer Driven Contracts! 
! 
! 
! 
Beth Skurrie! 
@bethesque / @pact_up! 
bskurrie@dius.com.au
! 
! 
“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
Integrated Tests: The Problems 
" Slow! 
" Easy to break! 
" Hard to fix! 
" Scales combinatorially 
3 classes, 4 code paths each! 
4 * 4 * 4 = 64 tests
Test Symmetry… how it works 
A B 
mock
Test 
1 
Test 
2 
Test 
3 
Integrated tests
Pacts to the Rescue - Making your microservices play nicely together with Consumer Driven Contracts
Test Symmetry: The Problem 
" Lack of automated tools! 
" Relies on developer eternal vigilance! 
" Does not scale
Posed to Dius 
Do we have the technology to achieve test 
symmetry?
System Integration Tests: The WORST 
" Slower! 
" Easier to break! 
" Harder to fix! 
" Scales BADLY 
" Lots of set up! 
" Flakey! 
" Extra infrastructure
Pact to the rescue!!!
Pact… how it works 
C A P 
B 
mock 
pact
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
Better API design!
Arrange - set up mock server
Arrange - set up expectations
Act and Assert
Pacts to the Rescue - Making your microservices play nicely together with Consumer Driven Contracts
Set up provider
Set up test data 
Consumer assumed: 
Provider complies:
Verify: Success!
What’s in it for me? 
• Black box testing - quicker turn around for builds! 
• Exploratory testing - hints as to design 
weaknesses! 
• All testing - catch bugs before committing, 
support for continuous deployment!
“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
In summary... 
Consumer Provider 
UI App 
Provid 
er 
Client 
API App DB 
Integrated test 
Test symmetry 
with Pact
Pact allows you to: 
" Reduce your defect turn around time! 
" Reduce the number of bugs that are committed into the 
codebase - immediate feedback on potential integration 
breakages! 
" Allows you to modify components with agility! 
" Have confidence that all the services in your system will work 
together! 
" Throw away your integration tests!!!
Pact! 
! 
Makes your microservices play nicely together ! 
with Consumer Driven Contracts! 
! 
github.com/realestate-com-au/pact! 
@pact_up! 
! 
! 
Beth Skurrie! 
bskurrie@dius.com.au 
@bethesque
P 
publish pact latest pact? 
tag “prod” pact 
deploy 
script 
prod pact? 
C 
Pact 
Broker

More Related Content

Pacts to the Rescue - Making your microservices play nicely together with Consumer Driven Contracts

  • 1. Pacts to the rescue! Making your microservices play nicely together ! with Consumer Driven Contracts! ! ! ! Beth Skurrie! @bethesque / @pact_up! bskurrie@dius.com.au
  • 2. ! ! “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
  • 3. Integrated Tests: The Problems " Slow! " Easy to break! " Hard to fix! " Scales combinatorially 3 classes, 4 code paths each! 4 * 4 * 4 = 64 tests
  • 4. Test Symmetry… how it works A B mock
  • 5. Test 1 Test 2 Test 3 Integrated tests
  • 7. Test Symmetry: The Problem " Lack of automated tools! " Relies on developer eternal vigilance! " Does not scale
  • 8. Posed to Dius Do we have the technology to achieve test symmetry?
  • 9. System Integration Tests: The WORST " Slower! " Easier to break! " Harder to fix! " Scales BADLY " Lots of set up! " Flakey! " Extra infrastructure
  • 10. Pact to the rescue!!!
  • 11. Pact… how it works C A P B mock pact
  • 12. 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
  • 14. Arrange - set up mock server
  • 15. Arrange - set up expectations
  • 19. Set up test data Consumer assumed: Provider complies:
  • 21. What’s in it for me? • Black box testing - quicker turn around for builds! • Exploratory testing - hints as to design weaknesses! • All testing - catch bugs before committing, support for continuous deployment!
  • 22. “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
  • 23. In summary... Consumer Provider UI App Provid er Client API App DB Integrated test Test symmetry with Pact
  • 24. Pact allows you to: " Reduce your defect turn around time! " Reduce the number of bugs that are committed into the codebase - immediate feedback on potential integration breakages! " Allows you to modify components with agility! " Have confidence that all the services in your system will work together! " Throw away your integration tests!!!
  • 25. Pact! ! Makes your microservices play nicely together ! with Consumer Driven Contracts! ! github.com/realestate-com-au/pact! @pact_up! ! ! Beth Skurrie! bskurrie@dius.com.au @bethesque
  • 26. P publish pact latest pact? tag “prod” pact deploy script prod pact? C Pact Broker