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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend