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

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

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

Bei automatisierten Tests ist es oftmals nicht einfach nachzuvollziehen was getestet wurde. Des Weiteren laufen Tests meist durch und geben nur im Fehlerfall etwas aus. Wie soll man mit dem Fachbereich kommunizieren, was getestet wurde?

Die beiden auf Groovy basierenden Frameworks Spock und Geb sorgen seit einiger Zeit für Aufsehen in der Java-Welt. Über Spock werden die Tests schon um einiges lesbarer. Durch die zusätzliche Nutzung von Geb lassen sich funktionale Tests aus der Sicht des Nutzers erstellen - so zu sagen die automatisierte Testfahrt der Applikation. Was noch fehlt sind gute Reports, die das Testvorgehen für alle Beteiligten nachvollziehbar machen.

exensio

May 20, 2015
Tweet

More Decks by exensio

Other Decks in Technology

Transcript

  1. Spock und Geb:
    Übersichtlich und nachvollziehbar Testen für alle!
    Entwicklertag Karlsruhe, 20.05.2015
    Ralf D. Müller, Freelancer
    Tobias Kraft, exensio GmbH

    View Slide

  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

    View Slide

  3. 3
    Funktionales
    Testing mit Geb
    Einbindung des
    Fachbereichs
    Verständliches
    Reporting
    Spock – kurz und
    übersichtlich

    View Slide

  4. 4
    JUnit vs. Spock

    View Slide

  5. 5
    JUnit vs. Spock

    View Slide

  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

    View Slide

  7. 7
    Klare Strukturierung von Feature-Methoden mit Blöcken
    -mal

    View Slide

  8. 8
    Mehrfache Durchläufe

    View Slide

  9. 9
    Mehrfache Durchläufe

    View Slide

  10. 10
    Extensions über Annotationen
    @Ignore(reason = "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

    View Slide

  11. 11
    Interaction Based Testing
    ● Verhalten des Codes unter verschiedenen Bedingungen überprüfen

    View Slide

  12. 12
    Was ist sonst noch interessant in Spock?
    ● Stubs, Mocks und Spies
    ● Umgang mit 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)

    View Slide

  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

    View Slide

  14. 14
    Funktionales
    Testing mit Geb
    Einbindung des
    Fachbereichs
    Verständliches
    Reporting
    Spock – kurz und
    übersichtlich

    View Slide

  15. 15
    Spezifikation durch den Fachbereich

    View Slide

  16. 16
    Spezifikation durch den Fachbereich

    View Slide

  17. 17
    Spezifikation in Code wandeln

    View Slide

  18. 18
    Screenshot?
    Link klicken?
    Formular ausfüllen?
    Keine Fehler, aber was
    wurde eigentlich getestet?
    Ich spezifiziere es einfach!
    Keine
    Fehler

    View Slide

  19. 19
    Funktionales
    Testing mit Geb
    Einbindung des
    Fachbereichs
    Verständliches
    Reporting
    Spock – kurz und
    übersichtlich

    View Slide

  20. 20
    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 0.10.0

    View Slide

  21. 21
    Spock in Kombination mit Geb
    Geb Testing
    Adapter
    WebDriver
    Spock
    Geb

    View Slide

  22. 22
    Einfach Selektieren mit JQuery-ähnlicher Syntax

    View Slide

  23. 23
    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()

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. 29
    Meine Tests erfüllen
    die fachlichen
    Anforderungen!
    Keine Fehler, aber was
    wurde eigentlich getestet?
    Ich spezifiziere es einfach!
    Weiterhin
    Keine Fehler

    View Slide

  30. 30
    Funktionales
    Testing mit Geb
    Einbindung des
    Fachbereichs
    Verständliches
    Reporting
    Spock – kurz und
    übersichtlich

    View Slide

  31. 31
    Probleme beim Reporting
    ● Testing klappt oder klappt nicht
    ● Power-Assertions sind schon sehr hilfreich
    ● 3 Report-Engines

    View Slide

  32. 32
    Standard Gradle Reports

    View Slide

  33. 33
    Standard Gradle Reports

    View Slide

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

    View Slide

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

    View Slide

  36. 36
    Aber was wurde getestet?
    ● Fehler geben Hinweis auf tatsächliche Tests
    ● Ansonsten geben die Reports nur die Spezifikation wieder

    View Slide

  37. 37
    Lösung Reporting – Geb Screenshots

    View Slide

  38. 38
    Lösung Reporting – Grails Film-Strip Plugin
    https://grails.org/plugin/film-strip

    View Slide

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

    View Slide

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

    View Slide

  41. 41
    • Weniger manuelle
    Tests
    • Nachvollziehbarkeit
    der Tests
    Fazit
    • Übersichtliche Tests
    mit Spock und Geb
    • Fachbereich hilft bei
    Testerstellung
    • Steigerung der
    Qualität

    View Slide

  42. Partner:
    Fragen?
    Vielen Dank! @tokraft
    [email protected]
    @RalfDMueller
    [email protected]

    View Slide

  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/

    View Slide