testen von microservices
play

Testen von Microservices Jrg Pfrnder Hypoport AG EUROPACE - PowerPoint PPT Presentation

Tipps & Tricks fr das Testen von Microservices Jrg Pfrnder Hypoport AG EUROPACE EUROPACE 15% der Immobilienkredite Deutschlands EUROPACE 15% der Immobilienkredite Deutschlands ca. 3 Mrd Euro / Monat Technologien Java /


  1. Tipps & Tricks für das Testen von Microservices Jörg Pfründer Hypoport AG

  2. EUROPACE

  3. EUROPACE 15% der Immobilienkredite Deutschlands

  4. EUROPACE 15% der Immobilienkredite Deutschlands ca. 3 Mrd Euro / Monat

  5. Technologien Java / Groovy MongoDB (Oracle) Spring Tomcat / Spring Boot

  6. Agenda • Traditionelle Testpyramide • Besondere Herausforderungen bei Microservices • Postel's Law für Tests • Drück‘ Dich aus! • Production Code ist Test Code • Täusche und betrüge • Doppelt hält besser

  7. Monolith

  8. Anzahl der Tests

  9. Lose Kopplung

  10. #1 Postel‘s Law für Tests

  11. Problem #1 {„ vorname “ : „Max“, „ nachname “ : „ M ustermann“ } String equals

  12. Problem #1 { „ vorname “ : „Max“, „ nachname “ : „Mustermann“ } String equals JSONassert (XMLAssert)

  13. Problem #1 { „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“ } String equals JSONassert (XMLAssert) ??

  14. Problem #1 { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“ } String equals JSONassert (XMLAssert)

  15. Inspiration: UI Automation • Nur wenige Elemente der UI werden getestet • Das meiste bleibt ungetestet

  16. Trick #1 { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“ } • JSONpath (Xpath) • Groovy RESTClient (SOAPClient)

  17. Trick #1: Postel‘s Law Be conservative in what you do, be liberal in what you accept from others. Jonathan Postel RFC793 Lizenziert unter Attribution über Wikimedia Commons http://commons.wikimedia.org/wiki/File:Jon_Postel.jpg#mediaviewer/File:Jon_Postel.jpg

  18. #2 Drück‘ Dich aus!

  19. Problem #2 http://geek-and-poke.com/geekandpoke/2013/7/28/tdd (Lizensiert unter Creative Commons 3.0 – mittleres Bild entfernt)

  20. Problem #2 http://geek-and-poke.com/geekandpoke/2013/7/28/tdd (Lizensiert unter Creative Commons 3.0 – mittleres Bild entfernt)

  21. Inspiration: Webdriver Page Object

  22. Trick #2: Response Object • Antwort des Services in einem Response-Object kapseln • Response-Object bietet fachliche Methoden an, macht intern die Umsetzung auf JSON bzw. XML

  23. Trick #2: Response Object

  24. Trick #2: Response Object Verständlichkeit Wiederverwendung

  25. #3 Production Code ist Test Code

  26. Problem #3 Lose Kopplung

  27. Trick #3 Contract Tests { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“ }

  28. Trick #3: Production Code ist Test Code Benutze die Implementierung des Clients als Test: Consumer Driven Tests bzw. Consumer Driven Test Suite (CDTS)

  29. Trick #3: Production Code ist Test Code Consumer Driven Test Suite Consumer Service- μ -Service Provider

  30. Trick #3: Production Code ist Test Code Consumer Driven Tests Technologieunabhängig?

  31. Trick #3: Production Code ist Test Code beinahe technologieunabhängig:

  32. #4 Täusche und betrüge!

  33. Problem #4: Downstream Dependencies ? μ -Service Downstream under Test Dependency

  34. Trick #4: Täusche und Betrüge μ -Service Mock under Test

  35. #4: Mountebank - der Marktschreier • www.mbtest.org • node.js basiert • Erhältlich als standalone- Installationspaket oder via npm

  36. #4: Mountebank - der Marktschreier μ -Service Mountebank under Test

  37. POST /imposters { "port": 4545, "protocol": "http", "stubs": [ { "responses": [ { "is": { "statusCode": 200, "headers": { "Content-Type": "text/html; charset=utf-8" }, "body": "<html><body><h1>Test</h1></body></html>" } } ], "predicates": [ { "startsWith": { "path": "/dokumente/download" } } ] }

  38. #4: Mountebank - der Marktschreier μ -Service Mountebank under Test

  39. #4: Täuscher auf Draht – Wiremock • www.wiremock.org • Java-basiert • als Bibliothek einbinden • Konfiguration als nativer Java-Methodenaufruf • kein Config-Port nötig

  40. #4: Täuscher auf Draht – Wiremock

  41. Wer startet Wiremock? Der Test Die Applikation

  42. Wer startet Wiremock? Der Test Die Applikation • Mocks und Testfälle gehören logisch zusammen • Separation von Testcode und Productioncode

  43. Wer startet Wiremock? Der Test Die Applikation • Mocks und Testfälle gehören logisch zusammen • Separation von Testcode und Productioncode • Kompliziertes Setup

  44. Wer startet Wiremock? Der Test Die Applikation • Mocks und Testfälle • Weniger Wartezeiten gehören logisch beim Hochfahren zusammen • Weniger • Separation von Konfigurations- Testcode und aufwand Productioncode • Einfacheres Arbeiten • Kompliziertes Setup lokal

  45. Trick #4: Mocking Services www.wiremock.org www.mbtest.org (Node.js) github.com/dreamhead/moco github.com/azagniotov/stubby4j github.com/vcr/vcr (RUBY)

  46. #5 Doppelt hält besser!

  47. Problem #5: Versionierung & CD v3 v2 v4 v7

  48. Problem #5: Versionierung & CD μ -Service A ? μ -Service B μ -Service C μ -Service D

  49. Trick #5: Doppelt hält besser!

  50. Nur zwei Versionen 1. Die Produktive 2. Die Neue -> Kein Versionsmanagement

  51. Unbreak Changes 1. Altes Schema { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“ }

  52. Unbreak Changes 1. Altes Schema 2. Eine Zwischenversion: altes UND neues Schema { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“, „ displayName “ : „Max Mustermann“ }

  53. Unbreak Changes 1. Altes Schema 2. Eine Zwischenversion: altes UND neues Schema 3. Altes Schema ausbauen { „ id “ : 9586729475, „ vorname “ : „Max“, „ nachname “ : „Mustermann“, „ name “ : „Max Mustermann“, „ displayName “ : „Max Mustermann“ }

  54. Trick #5: Doppelt hält besser Wenn doch mal versehentlich zwei Services genau gleichzeitig ausrollen, die nicht miteinander arbeiten können?

  55. Trick #5: Doppelt hält besser • Small Changesets

  56. Trick #5: Doppelt hält besser • Small Changesets • Echtes Continuous Deployment

  57. Trick #5: Doppelt hält besser • Small Changesets • Echtes Continuous Deployment • Miteinander Reden!

  58. Trick #5: Doppelt hält besser - Variante 1

  59. Trick #5: Doppelt hält besser - Variante 2

  60. Die gekippte Pyramide

  61. Tipps & Tricks 1. Postel‘s Law: Teste nicht zu detailliert 2. Drück‘ Dich aus: Abstrahiere mit Response-Objects 3. Production Code ist Test Code: Einfache Consumer Driven Tests 4. Täusche und Betrüge: Benutze Mocks für Downstream Dependencies 5. Doppelt hält besser: CDTS in der Deployment Pipeline

  62. Zum Weiterlesen • Mike Cohn: http://www.mountaingoatsoftware.com/blog/the -forgotten-layer-of-the-test-automation- pyramid • Ian Robinson: Consumer-Driven Contracts: A Service Evolution Pattern http://martinfowler.com/articles/ consumerDrivenContracts.html • Brandon Byars: Enterprise Integration Using REST http://martinfowler.com/articles/enterpriseREST .html • Jay Fields: Working Effectively with Unit Tests https://leanpub.com/wewut

  63. Tipps & Tricks 1. Postel‘s Law: Teste nicht zu detailliert 2. Drück‘ Dich aus: Abstrahiere mit Response-Objects 3. Production Code ist Test Code: Einfache Consumer Driven Tests 4. Täusche und Betrüge: Benutze Mocks für Downstream Dependencies 5. Doppelt hält besser: CDTS in der Deployment Pipeline

Recommend


More recommend