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

Spock und Geb: Übersichtlich und nachvollzierbar Testen für alle!

7de95d7db80b3f52975ec0a245eaad14?s=47 exensio
October 10, 2017
58

Spock und Geb: Übersichtlich und nachvollzierbar Testen für alle!

Vortrag beim "DevOps Würzburg Mainfranken" Meetup von Ralf D. Müller und Tobias Kraft

7de95d7db80b3f52975ec0a245eaad14?s=128

exensio

October 10, 2017
Tweet

Transcript

  1. Spock und Geb: Übersichtlich und nachvollziehbar Testen für alle! 10.10.2016

    Ralf D. Müller, Freelancer Tobias Kraft, exensio GmbH
  2. 2 Meine Software wird durch automatisierte Tests überprüft ☺ Keine

    Fehler, aber was wurde eigentlich getestet? Ich muss manuell testen! Wir haben einen teuren Bug im System! Warum wurde der nicht vorher gefunden? Keine Fehler
  3. 3 Funktionales Testing mit Geb Einbindung des Fachbereichs Verständliches Reporting

    Spock – kurz und übersichtlich
  4. 4 JUnit vs. Spock

  5. 5 JUnit vs. Spock

  6. 6 Spock im Überblick • Test und Spezifikations-Framework • Groovy

    ist Basis • DSL (Domain Specific Language) • Testing für JVM-fähige Sprachen • IDE-Unterstützung • Version 1.0 seit März 2015 verfügbar • Version 1.1 seit Mai 2017 verfügbar
  7. 7 Klare Strukturierung von Feature-Methoden mit Blöcken -mal

  8. 8 Mehrfache Durchläufe

  9. 9 Mehrfache Durchläufe

  10. 10 Extensions über Annotationen @Ignore("Not yet implemented") @IgnoreRest @IgnoreIf({ properties."os.name"

    ==~ /Linux.*/) }) @Timeout @FailsWidth @Requires({ env.containsKey(„DMS_ENABLED") }) @RestoreSystemProperties @Issue("http://jira.exensio.de/browse/GM-19") @See("http://ldaley.com/post/6570075743/") @Title("a readable title") @Narrative("a beautiful description for a report") Dokumentation Ignorieren Weitere Extensions
  11. 11 Interaction Based Testing Verhalten des Codes unter verschiedenen Bedingungen

    überprüfen
  12. 12 Was ist sonst noch interessant in Spock? • Exceptions

    • old Methode • Hamcrest Matchers when: myList.add('foo') then: myList.size() == old(myList.size()) + 1 then: def e = thrown(IllegalArgumentException) e.getMessage().startsWith("No tagCategory") expect: 2.9d closeTo(3, 0.5)
  13. 13 Meine automatisierten Tests können jetzt auch vom Fachbereich gelesen

    werden… Keine Fehler, aber was wurde eigentlich getestet? Ich muss manuell testen! Keine Fehler, aber was wurde eigentlich getestet? Ich spezifiziere es einfach! Keine Fehler
  14. 14 Funktionales Testing mit Geb Einbindung des Fachbereichs Verständliches Reporting

    Spock – kurz und übersichtlich
  15. 15 Spezifikation durch den Fachbereich

  16. 16 Spezifikation durch den Fachbereich

  17. 17 Spezifikation in Code wandeln

  18. 18 Spezifikation in Code wandeln

  19. 19 Screenshot? Link klicken? Formular ausfüllen? Keine Fehler, aber was

    wurde eigentlich getestet? Ich spezifiziere es einfach! Keine Fehler
  20. 20 Funktionales Testing mit Geb Einbindung des Fachbereichs Verständliches Reporting

    Spock – kurz und übersichtlich
  21. 21 Geb im Überblick • Webtesting und Screen-Scraping • DSL

    auf Groovy basierend • jQuery ähnliche Syntax • Nutzung von WebDriver • IDE-Unterstützung • Integration mit Spock, TestNG oder JUnit • Version 1.1.1
  22. 22 Spock in Kombination mit Geb Geb Testing Adapter WebDriver

    Spock Geb
  23. 23 Einfach Selektieren mit JQuery-ähnlicher Syntax

  24. 24 Einfach Selektieren mit JQuery-ähnlicher Syntax Beispiele für Selektoren $("div",

    2) $("td.odd", 0..2)*.text() $("img", alt: "Titel") $("img", alt: "Titel").previous() $("div#heading").find("div", 3) $("div", text: iStartsWith ("groovy")) $("form").find("input", name: "speaker").value()
  25. 25 Page Objects – zur Repräsentation von Webseiten

  26. 26 Page Objects – zur Repräsentation von Webseiten

  27. 27 Page Objects – zur Repräsentation von Webseiten

  28. 28 • Nutzung von WebDriver-Implementierungen • Gängige Browser • PhantomJS

    • Steuerbar über Konfiguration Testing mit verschiedenen Browsern
  29. 29 • Nutzung von WebDriver-Implementierungen • Gängige Browser • PhantomJS

    • Steuerbar über Konfiguration Testing mit verschiedenen Browsern
  30. 30 Meine Tests erfüllen die fachlichen Anforderungen! Keine Fehler, aber

    was wurde eigentlich getestet? Ich spezifiziere es einfach! Weiterhin Keine Fehler
  31. 31 Funktionales Testing mit Geb Einbindung des Fachbereichs Verständliches Reporting

    Spock – kurz und übersichtlich
  32. 32 Probleme beim Reporting • Testing klappt oder klappt nicht

    • Power-Assertions sind schon sehr hilfreich • 3 Report-Engines
  33. 33 Standard Gradle Reports

  34. 34 Standard Gradle Reports

  35. 35 Spock 1.0-SNAPSHOT Report http://spockframework.github.io/spock/sampleReports/Ninja%20Commander.html

  36. 36 Spock-Reports Plugin von Renato Athaydes https://github.com/renatoathaydes/spock-reports

  37. 37 Aber was wurde getestet? • Fehler geben Hinweis auf

    tatsächliche Tests • Ansonsten geben die Reports nur die Spezifikation wieder
  38. 38 Lösung Reporting – Geb Screenshots

  39. 39 Lösung Reporting – Spock Reports mit Geb Screenshots https://github.com/rdmueller/etka15

  40. 40 Lösung Reporting – Spock Reports mit Geb Screenshots

  41. 41 • Weniger manuelle Tests • Nachvollziehbarkeit der Tests Fazit

    • Übersichtliche Tests mit Spock und Geb • Fachbereich hilft bei Testerstellung • Steigerung der Qualität
  42. Fragen? Vielen Dank! @tokraft tobias.kraft@exensio.de @RalfDMueller ralf.d.mueller@gmail.com

  43. 43 Referenzen • Spock und Geb: Übersichtlich und nachvollziehbar Testen

    für alle! Vortrag, Beispiele Source Code http://rdmueller.github.io/etka15/ • Teil 1 : Mit Mr. Spock beim Testeinsatz, Javamagazin (12/2014) Teil 2 : Mr. Spock ruft Geb, Javamagazin (01/2015) http://www.exensio.de/articles/