Slide 1

Slide 1 text

@michikuehne TDD for APIs in a Microservice World Michael Kuehne-Schlinkert Head of Development @ Cybus

Slide 2

Slide 2 text

@michikuehne Cybus brings untapped Data Sources to a secure API Access Control Pre-Processing & API Shopfloor Protocols Security Monitoring Maintenance Efficiency Sovereignty

Slide 3

Slide 3 text

@michikuehne Our Challenges   Security, Reliability & Scalability è Service Level Agreements Better Representation of Customer Needs through Tests & Codes Loosly coupled but highly connected Microservices Efficient TDD with limited resources

Slide 4

Slide 4 text

@michikuehne „How to validate that our API is working as intended?“ by Steve Klabnik

Slide 5

Slide 5 text

@michikuehne „How to efficiently validate that our microservice ecosystem is working as intended?“ by Michael Kuehne-Schlinkert

Slide 6

Slide 6 text

@michikuehne Simplified Ecosystem Device Service Data {...} Data {...} Data {...} UI Service Auth Service

Slide 7

Slide 7 text

@michikuehne Where to start? Story   As a , __.I want __.so that . Example __.As an admin of the cybus middleware __.I want to control the read access to my devices __.so that users can only read the data they are allowed to Scenario   GIVEN __.WHEN __.THEN Example __. GIVEN External Device __. GIVEN Device Service __. GIVEN Auth Service __. WHEN External Device provides new data __. WHEN Read Access to Device is granted __. THEN Device Service reads data from external device

Slide 8

Slide 8 text

@michikuehne Test Scenario Device Service Data {...} Data {...} Data {...} UI Service Auth Service External Device Data {...} Stubbed

Slide 9

Slide 9 text

@michikuehne Acceptance Tests Platform Tests   Turn Scenarios into Tests   Focus on whole Microservice Ecosystem Verify Functionality of Ecosystem External / Third-Party Services are stubbed/mocked   Black Box Testing   Entry Point of Platform Test depends on Scenario   API   GUI Contract Tests   Turn API Specifications into Tests   Focus on only One Mircroservice Verify the Interface (Contract)   Black Box Testing

Slide 10

Slide 10 text

@michikuehne Integration Tests A.k.a. Component Tests & Service Tests   Focus on only One Microservice Verify Functionality of One Service   Break down Scenarios   End-to-End Tests – but not to end of ecosystem   Internal Services are stubbed/mocked   Gray Box Testing (Black & White) Resources Domain ORM External Client Stubbed Service Ext. DB Stb. Test Client Simplified Microservice Architecture

Slide 11

Slide 11 text

@michikuehne Functional Tests Controller Industrial Protocol Device Handler   Focus on 2+ Classes/Modules of Domain Verify Interaction between Modules   White Box Testing   Internal Dependencies are stubbed/mocked Example Domain of Microservice Stubbed

Slide 12

Slide 12 text

@michikuehne Unit Tests Controller Industrial Protocol Device Handler   Focus on One Unit (Class/Module) of Domain Verify Functionality of One Unit   Internal Dependencies are stubbed/mocked   White Box Testing Example Domain of Microservice Stubbed

Slide 13

Slide 13 text

@michikuehne Our TDD Cycle Acceptance Tests Integration Tests Functional Tests Unit Tests Code Black Box Gray Box White Box

Slide 14

Slide 14 text

@michikuehne Our TDD Cycle with aspired Test Coverage Acceptance Tests Integration Tests Functional Tests Unit Tests Code tcU à 100% tcI à 100% tcF à 100% - tcI tcI + tcF à 100% tcA à x% tc = test coverage x –

Slide 15

Slide 15 text

@michikuehne Lessons Learned It works! We overcame Testing Hell Less Test Code and less Fragile Tests but high test coverage   Quality of Story Definitions increased with mandatory Scenarios Efficency comes with the right Tools Each Microservice must provide Test Library (e.g. Stubs) Deterministic Environments gained Complexity Asynchronous Services require Gray to White Box Testing Functional Tests became our Plan B

Slide 16

Slide 16 text

@michikuehne cybus.io @cybus_io [email protected] Pssst! We‘re hiring! Michael Kuehne-Schlinkert @michikuehne [email protected] Thx! ...and happy testing!

Slide 17

Slide 17 text

@michikuehne Appendix   Icons by Gregor Cresnar from www.flaticon.com is licensed by CC 3.0 BY   Icons by Freepik from www.flaticon.com is licensed by CC 3.0 BY