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

Testing microservices the right way

Testing microservices the right way

Microservices shine in many aspects, but testability. Whenever you deploy a service, no matter how small it is, as long as it has dependencies, you have to keep them in mind. In Toptal, we realized the complexity of the integration testing when started our path from a monolithic application to microservices. In this talk, I’ll show what criteria we used to make a smart decision, what tools we haven’t chosen and how contract testing simplified our development flow and CI.

Tatiana Shepeleva

September 28, 2019
Tweet

More Decks by Tatiana Shepeleva

Other Decks in Technology

Transcript

  1. Testing microservices
    the right way
    Tatiana Shepeleva @ Toptal

    View Slide

  2. Tatiana Shepeleva @ Toptal

    View Slide

  3. • I am Quality Assurance Engineer
    • Love my job
    • 36 countries

    View Slide

  4. toptal.com

    View Slide

  5. Testing microservices
    the right way

    View Slide

  6. Microservices are great

    View Slide

  7. Microservices are light

    View Slide

  8. Microservices are isolated

    View Slide

  9. Microservices are fun

    View Slide

  10. Microservices are fun

    View Slide

  11. View Slide

  12. ~2000 end-to-end* tests
    * also known as acceptance, UI or business tests

    View Slide

  13. ~3800 min

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. Complications
    • Have different databases
    • Use different languages
    • Work with different protocols

    View Slide

  18. +5 min/service

    View Slide

  19. What’s wrong with end-to-end tests?
    • Expensive and complex infrastructure
    • Time consuming
    • Flaky

    View Slide

  20. View Slide

  21. View Slide

  22. Test integration separately

    View Slide

  23. Requirements
    •Ruby
    •JavaScript
    •Scala/JVM
    •Elixir
    •WebSocket support
    •Easy to update tests
    •Provider can’t break consumers

    View Slide

  24. Record & Replay

    View Slide

  25. View Slide

  26. View Slide

  27. Record & Replay
    Polly.JS VCR
    Ruby ❌ ✅
    JavaScript ✅ ✅
    Scala/JVM ❌ ✅
    Elixir ❌ ✅
    WebSocket support ✅ ❌
    Easy to update tests ❌ ❌
    Provider can’t break consumers ❌ ❌

    View Slide

  28. Fake server

    View Slide

  29. View Slide

  30. Fake servers
    Wiremock Mockserver
    Ruby ✅ ✅
    JavaScript ✅ ✅
    Scala/JVM ✅ ✅
    Elixir ❌
    WebSocket support ❌ ❌
    Easy to update tests ✅ ✅
    Provider can’t break consumers ❌ ❌

    View Slide

  31. Contract tests

    View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. Contract tests
    Spring Cloud Pact
    Ruby ❌ ✅
    JavaScript ❌ ✅
    Scala/JVM ✅ ✅
    Elixir ❌
    Web Socket support
    Easy to update tests ✅ ✅
    Provider can’t break consumers ✅ ✅

    View Slide

  36. Cons
    • Expensive and complex infrastructure ✅
    • Time consuming ✅
    • Flaky ✅

    View Slide

  37. Cons
    • Not a functional testing

    View Slide

  38. docs.pact.io

    View Slide

  39. Pact
    • Support different languages (Ruby, JS, Go,
    PHP, Python, JVM)
    • Framework-agnostic
    • Language-agnostic contract (JSON)

    View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. GraphQL?

    View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. WebSockets?

    View Slide

  53. Experimental support
    Pact-JS

    View Slide

  54. gRPC?

    View Slide

  55. No
    but may be - #protobufs

    View Slide

  56. Storage for contracts
    • Your CI
    • Your codebase
    • Pact Broker

    View Slide

  57. Pact Broker
    • Stores versions and tags
    • Webhooks to trigger checks or notifications
    • can-i-deploy tool

    View Slide

  58. View Slide

  59. View Slide

  60. View Slide

  61. View Slide

  62. Pact Broker
    PactFlow

    View Slide

  63. View Slide

  64. View Slide

  65. How is it actually going to work?

    View Slide

  66. Consumer flow

    View Slide

  67. Consumer flow

    View Slide

  68. Consumer flow

    View Slide

  69. Consumer flow

    View Slide

  70. Consumer flow

    View Slide

  71. Consumer flow

    View Slide

  72. Consumer flow

    View Slide

  73. Consumer flow

    View Slide

  74. Consumer flow

    View Slide

  75. Provider flow

    View Slide

  76. Provider flow

    View Slide

  77. Provider flow

    View Slide

  78. Provider flow

    View Slide

  79. Provider flow

    View Slide

  80. Provider flow

    View Slide

  81. The Right Way
    • 10 instead of 3800 min
    • Contract tests are a part of unit tests
    • Number of end-to-end tests minimal

    View Slide

  82. The end
    Tatiana Shepeleva
    tati.engineer

    View Slide