Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Confidently Releasing Microservices With Consumer Driven Contracts

Confidently Releasing Microservices With Consumer Driven Contracts

Many teams working with microservices need confidence they don't break functionality when making changes. System integration tests, functional tests, and sometimes manual tests are older ways to obtain that confidence. These processes may take more than 1 day or even more if different teams or a different company own the services.

To ensure the same level of confidence and speed up delivery, we can create Contracts for integrations between consumers and providers. Contracts created by consumer services need to pass with every build going in production to guarantee the integrations between systems/services work fine. Checking these contracts in a CI/CD pipeline makes feedback loops even faster.

A Contract is a collection of agreements between a Consumer and a Provider that describes the interactions that can take place between them. Consumer Driven Contracts (CDCs) is a pattern that drives the development of the Providers from its Consumer's point of view. It is TDD for microservices.

This talk covers an end to end demo of contract testing between two microservices to show how to release microservices with confidence, get early feedback, speed up delivery, and comparison with other testing strategies.

Gopinath Langote

March 22, 2019
Tweet

More Decks by Gopinath Langote

Other Decks in Technology

Transcript

  1. GopinathLangote
    Confidently Releasing Microservices
    With Consumer Driven Contracts
    Software Engineer

    View Slide

  2. Confidently
    Releasing Microservices With Consumer Driven Contracts

    View Slide

  3. Confidently
    Releasing
    Microservices With Consumer Driven Contracts

    View Slide

  4. Confidently Releasing
    Microservices
    With Consumer Driven Contracts

    View Slide

  5. Confidently Releasing Microservices With
    Consumer Driven
    Contracts
    Client / Consumer Server / Provider

    View Slide

  6. Confidently Releasing Microservices With Consumer Driven
    Contracts

    View Slide

  7. Payments Team Growth Team
    Problem Statement

    View Slide

  8. Refactoring

    View Slide

  9. Unit Tests
    Mocked Integration Tests
    Functional Tests
    Manual Tests
    Test Pyramid

    View Slide

  10. Unit Test
    Limited to method level
    Not aware of other service
    Trustworthy

    View Slide

  11. Mocked
    Integration
    Test

    View Slide

  12. Mocked User Service
    Not aware of other service Changes
    No Feedback Loop
    Trustworthy
    Mocked Integration Test

    View Slide

  13. Real User Service
    Time Consuming
    Longer Feedback Loop
    Trustworthy
    Functional Test

    View Slide

  14. Manual Test

    View Slide

  15. Unit Tests
    Contract Test
    Functional
    Manual Tests
    Test Pyramid

    View Slide

  16. Account Service
    Consumer Service
    Contract Test
    User Service
    Producer Service
    Payments Team Growth Team

    View Slide

  17. Consumer Contract Test
    Register expectation
    Request
    Account Service User Service
    Mock Contract Server
    TEST
    Response
    Contract File

    View Slide

  18. User Service
    Get the contracts
    Assert the expectations from
    consumer
    Consumer
    Provider
    Mock Contract Server
    Account Service
    Provider Verification

    View Slide

  19. Initialize Mock Server

    View Slide

  20. Setup Expectations

    View Slide

  21. Running Test

    View Slide

  22. Demo
    Consumer Contract Test

    View Slide

  23. Get the contracts
    Assert the expectations from
    consumer
    Provider Service
    Provider Verification

    View Slide

  24. Provider Verification

    View Slide

  25. Demo
    Provider Verification

    View Slide

  26. Provider State

    View Slide

  27. Setup Provider State

    View Slide

  28. CDC In Action

    View Slide

  29. Test As Part Of Source Code
    Separate Contract Test Code
    Consumer Test

    View Slide

  30. Cloud Storage
    Contract Brokers
    Contract Sharing

    View Slide

  31. Contract Verification Test
    External tools
    Provider Verification

    View Slide

  32. Against Current Build
    Provider Verification In CI
    Against Stable Build

    View Slide

  33. Tools

    View Slide

  34. 1. JVM
    2. .Net
    3. Ruby
    4. Go
    5. JavaScript
    6. Python
    7. Php
    8. Swift
    You can implement you own https://pact.io
    Pact

    View Slide

  35. Other Tool
    janus
    VCR
    PACTO

    View Slide

  36. Convince Me
    https://docs.pact.io/faq/convinceme

    View Slide

  37. Resources
    https://github.com/gopinath-langote/Pact-JVM-Implementation
    https://pact.io
    https://martinfowler.com/articles/microservice-testing/
    https://www.martinfowler.com/articles/consumerDrivenContracts.html

    View Slide

  38. Questions?

    View Slide

  39. Thank You
    GopinathLangote

    View Slide