SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Benjamin Schmid | eXXcellent solutions gmbh

Automatisierte GUI-Tests mit Selenium und
TestNG in der Praxis
Inhalt

» Vision
» Vorstellung der Technologien
– Selenium
– TestNG

» Die Herausforderungen der Praxis
» Plugging everything together: Live-Demo
» Fazit und Ausblick

Benjamin Schmid | eXXcellent solutions gmbh
Vision

SoftwareÄnderung

Ne

ue

Te

Autom.
Testzyklus

sts

Test-Feedback

Test

Benjamin Schmid | eXXcellent solutions gmbh
Die Technologien
Selenium

Benjamin Schmid | eXXcellent solutions gmbh
Was ist Selenium
» … ein Testwerkzeug für Web-Applikationen
» … steuert einen Browser direkt, wie ein normaler Benutzer
» … ist Freie Software / Open Source
» … läuft auf:
IE
Firefox
Konqueror
Seamonkey Safari

Camino

Opera

Bestandteile von Selenium
» Core
Steuerungs-Engine für den Browser (JavaScript)
» IDE
Scripting-Entwicklungswerkzeug (FireFox)
» RC
Remote Control (API für Java, C#, Python, …)
» weitere Selenium Grid, …
Benjamin Schmid | eXXcellent solutions gmbh
Wie funktioniert‘s? – Selenium Core/IDE
Selenium Core

» 100% DHTML/JavaScript-Engine
» „Bedient“ Browser, z.B.:
open (url), click (locator),
waitForCondition (…), keyUp (…),
mouseDownAt (…), …

Selenium IDE

» FireFox Plugin
» Scripting von Selenium Core
» Autom. Record & Playback
(nur bei stabilen IDs/Namen!)
Benjamin Schmid | eXXcellent solutions gmbh
Wie funktioniert‘s? – Selenium Locators
Wie können Elemente auf der HTML-Seite adressiert werden

» id=id
» name=name
» link=textPattern
» css=cssSelectorSyntax
» dom=javascriptExpression
» xpath=xpathExpression
Vor allem die XPath-Notation ist mächtig
Extension Selenium UI Elements: ui=issuePages::article(index=2)
Benjamin Schmid | eXXcellent solutions gmbh
Wie funktioniert‘s? – Selenium RC
» RC Server konfiguriert,
startet & stoppt
den gew. Browser

» Injiziert via Proxy die
Selenium-Core-Engine

» Dient als Vermittler
für die Anfragen und
Befehle der RC-Clients

Quelle: openqa.org
Benjamin Schmid | eXXcellent solutions gmbh
Selenium – „Standard Selenium“-Entwicklung
Vom Framework nahe gelegter Entwicklungszyklus:

1.
2.
3.
4.

Testpfad interaktiv mit Selenium IDE entwickeln
Entwurf als Java-RC/JUnit Code exportieren
Test anpassen, Prüfungen einfügen und einbinden
Tests starten (RC Server, Zielapplikation und Test)

Benjamin Schmid | eXXcellent solutions gmbh
Wie funktioniert‘s? – IDE/Java-RC Skript
Beispiel: Mit Selenium IDE generiertes Java RC-Skript

HTML name/id Selektor
<input name=„p“>..</input>

IDE-generierter
XPath Selektor
Benjamin Schmid | eXXcellent solutions gmbh
Wo sind die Grenzen?

» Grenzen durch Sicherheitsmodelle der Browser
– Host Testserver = Host App.-Server
(same-origin policy/Anti-XSS)
– HTTPS (Zertifikate/Injection)
– Lösung: Subprojekt Web Driver (Native Engine)

» Cross-Browser Funktionalität nicht ganz gratis
» Bedingte Eignung für Last-Tests
» Sehr positiv: Kontinuierlich steigende
Aufmerksamkeit & Projektaktivität!
(Heavy User: Google)
Benjamin Schmid | eXXcellent solutions gmbh
Selenium - Fazit (1/2)
Browser„fernsteuerung“

echter Blackbox Test

gut gewappnet für Web 2.0, Ajax, Webframeworks:
– dynamische Inhalte, IDs, Layouts
– Client-Logiken (Ajax, JS-Frameworks)
– Proprietäre HTTP-Kommunikation

Java-Bridge

Selektoren (XPath)
End-to-End
End-to-End

Gewohnte Sprachmittel/Umgebung

Ideal für Funktions-/Abnahme-Tests
(auch Cross-Browser-Tests)
Benjamin Schmid | eXXcellent solutions gmbh
Selenium - Fazit (2/2)
Record & Playback mit Selenium IDE
Komfortabler Start für einfache/kleine
„Web 1.0“-Applikationen/Tests
IDE Standardvorgehen: Schnell & Einfach
Keine Out-of-the Box Lösung für
- dynamische IDs (Echo2, wingS, …) und
- langfristig stabile Tests (wechselnde HTML Layouts)

It‘s free software!
Ideales Konzept/Technologie
Potential was Verwendung anbelangt
Benjamin Schmid | eXXcellent solutions gmbh
Die Technologien
TestNG

Benjamin Schmid | eXXcellent solutions gmbh
Warum kein JUnit?

» Erstes, populäres Testframework
(1998, Gamma & Beck)

» Quasi de facto Standard
» Funktionalität rein
auf Unit-Tests ausgelegt
» „Opfer“ des eigenen Erfolgs:
– Regelmäßiger Einsatz
außerhalb echter Unit-Tests
– Lange Zeit kaum Updates (3.x)
– Offene Wünsche für funktionale
Tests
Benjamin Schmid | eXXcellent solutions gmbh
Was ist TestNG?

» Ein Testing-Framework

für alle Testebenen, d.h.
– Unit-Tests
– Funktionale Tests
– Integrations-Tests
– etc.

» Test-Gliederung in:

Suite -> Test -> Class -> Method
+ parallel: Groups

» JUnit3-Kompatibilitäts-Modus
» Plugins für Eclipse und IntelliJ
Benjamin Schmid | eXXcellent solutions gmbh
TestNG – Strukturierung von Tests

» Gruppierung mit groups
– Ein- und Ausschließen
von Tests & Konfigurationen
– Mehrfache Gruppenzugehörigkeiten
– Auswahl durch reguläre Ausdrücke:
gui.* -> gui.basics, gui.longrunner,…

» Abhängigkeiten/Reihenfolge mit
dependsOnGroups/Methods
JUnit: 1 PASSED and 9 FAILURES
TestNG: 1 PASSED, 1 FAILED and 8 SKIPPED
Benjamin Schmid | eXXcellent solutions gmbh
TestNG - Konfiguration & Datenquellen

» Freie Konfigurationsmethoden je Ebene:
@Before/After[Suite - Method]
@Before/AfterGroup

» Parameter: Testausführung mit konfiguriertem Wert
» DataProvider: Test-Regression mit versch. Werten
@Test(dataProvider= “user-agents”)
public void verifyUserAgent(String s, int code) {
assert getReturnCodeFor(s) == code;
}
Benjamin Schmid | eXXcellent solutions gmbh
Weitere interessante Features in TestNG

» Parallelität und Multithreading
@Test(invocationCount=1000, threadPoolSize=10)

» Erfolgsquoten
@Test(invocationCount=100, successPercentage=95)

» Maximale Ausführungszeiten / Timeouts
@Test(timeOut=10000)

» Automatischer generierte Testsuite
der zuletzt fehlgeschlagenen Tests
testng-failed.xml

» Eigene Factories zur Test-Instanziierung
Benjamin Schmid | eXXcellent solutions gmbh
TestNG – All-in-one Beispiel

Benjamin Schmid | eXXcellent solutions gmbh
TestNG - Fazit

» TestNG deckt deutlich mehr als nur Unit-Tests ab
» Für unseren Fall besonders attraktive Vorteile:
Gruppen
DataProvider
Multi-Threading
Plugin-API

(„GUI“, „Business“, „QuickTests“)
(Test-Regression mit versch. Daten)
( Selenium Grid)
(Eigene Test-Reports, …)

Grenzen: DataProvider + Dependencies

Factory

Für unsere Anforderungen gegenüber
JUnit deutlich überlegen
Benjamin Schmid | eXXcellent solutions gmbh
Die Herausforderungen
der Praxis

Benjamin Schmid | eXXcellent solutions gmbh
Challenge #1: Effiziente GUI-Test Erstellung

» Aufgezeichnete bzw. manuell codierte
Selektoren problematisch:
–
–
–
–

XPath & HTML-Wissen zum Verständnis erforderlich
Ohne stabile & sprechende HTML IDs sehr komplex
Nicht selbsterklärend; Blick in HTML-Seite notwendig
Anfällig gegenüber Änderung am Layout/HTML-Code

Wunsch:
» Einfache und selbsterklärende API für Jedermann
» Einmal geschriebene Test sollen robust gegenüber
internen Änderungen sein
Benjamin Schmid | eXXcellent solutions gmbh
Lösung #1: Abstraktion der HTML Seite/Widgets
Sammlung semantischer UI-Elemente
als Fassade über Selenium (Menü, Button, Textfeld)
– Elemente „wissen“ um ihre HTML-Representation
(Projekt & Framework-Spezifisch)
– Transformieren ihr Adresse in passende XPath-Ausdrücke
Test Code (Klartext)
Code (Klartext)
Test Code (Klartext)
Test
textfield.enter („Login“,“password“)
Test Code (Klartext)
textfield.enter („Login“,“password“)
textfield.enter („Login“,“password“)
textfield.enter („Login“,“password“)

textfield.enter („Login“,“password“)
textfield.enter („Login“,“password“)
textfield.enter („Login“,“password“)
textfield.enter („Login“,“password“)

Textfield Widget Abstraktion (XPath)
table[@class[contains(.,‚K1')]
table[@class[contains(.,‚K1')]
[span:contains(.,‚Login')]…
[span:contains(.,‚Login')]…

Browser/Selenium Core
<table class=K1><span>Login</span>
<table class=K1><span>Login</span>
<input id=z1/>
<input id=z1/>

Selenium RC
type(„table[@class…“,“password“)
type(„table[@class…“,“password“)
Benjamin Schmid | eXXcellent solutions gmbh
DSL – Ein Beispiel

Benjamin Schmid | eXXcellent solutions gmbh
Herausforderung #2: Die Nachvollziehbarkeit

» Unbeaufsichtigte Ausführung automatischer GUI-Tests
» Vielschichtige Testabdeckung
Viele Fehlerpotentiale
regelmäßige Fehleranalyse notwendig
Wunsch nach Transparenz:
Einfaches nachvollziehen & verstehen von:
» was passiert?
und in welchem Kontext?
» was schlägt fehl?
Benjamin Schmid | eXXcellent solutions gmbh
Lösung #2
Transparenz schaffen:
» Lesbarer Test & Ablaufprotokoll
durch semantische API und Logmessages
» Anreicherung des Ablaufprotokolls um Screenshots
» Archivierung: Ablaufprotokoll, Applikatonslog, etc.
Umsetzung:
– Screenshots via Logging
– Modifizierter TestNG TestReporter
Benjamin Schmid | eXXcellent solutions gmbh
Herausforderung #3: Die grüne Wiese

» Tests in datenlosen Systemen wenig gewinnbringend
» Sinnvolle Quellen von Testdaten:
– künstlich erzeugte Datenszenarien:
Aufwändig zu konstruieren; definierte Konstellation
– produktionsnahe Echt-Daten:
realitätsnahe Mengengerüste; Stichproben geiignet

» Es gilt bei Bedarf die umfangreiche Datenszenarios
schnell wieder herstellen zu können, welche die
Grundlage für den jeweiligen Test bildeten
Benjamin Schmid | eXXcellent solutions gmbh
Lösung #3: Snapshots und RDBMS Refactoring
Snapshot-Mechanismen von Datenbanken
– MS SQL: „Database Snapshots“
(ab SQL Server Enterprise/Developer)
– Oracle: „Oracle Flashback“
(ab Oracle 10gR2)

MS SQL: Snapshot Rollback von 20GB in ~1 Min!
Automatische und Verlustfreie Migration
– Automatische Migration der archivierten Datenszenarios
an aktuelles RDBMS Schema

LiquBase
Benjamin Schmid | eXXcellent solutions gmbh
Herausforderung #4: Pluggin‘ all together
Server sicher
stoppen
SoftwareÄnderung

Test-Feedback

Datensituation
+ Migration

Ne

ue

Testauswertung

sts

Autom.
Testzyklus

Applikation
deployen

Te

Log-/ReportArchivierung

Ablauf
protokollieren
Test

Server starten
(Appl, RC)
Start
abwarten
Benjamin Schmid | eXXcellent solutions gmbh
Live Demo

Benjamin Schmid | eXXcellent solutions gmbh
Fazit und Ausblick

Benjamin Schmid | eXXcellent solutions gmbh
Erfahrungen aus der Praxis
Erfahrungen im Projekt:

» Gute Projekt-Akzeptanz
» Einfach: Selbst Projektleiter entwirft UI-Tests [im Zug]
» Hoher Reuse-Anteil dank Abstraktion des Konzepts
Technische Pitfalls:
» Autom. Integrationsprozess (Tomcat, etc.)
» MS IE (XPath im deadly slow, delikat)
» Selenium Feinheiten: (fehlende waitfor(), …)
Benjamin Schmid | eXXcellent solutions gmbh
Lohnen sich automatisierte GUI-Tests?

» Generell: GUI-Tests sind
– fragil, aufwendig & langsam
– Dafür aber auch umfassend und realistisch

» UI-Tests ersetzen keine Unit-/Abnahme-/Tests!
– Unit-Tests sind wertvolle White-Box Tests und sollten nicht
vernachlässigt werden!
– Schnelle & einfache Basis für weitere Tests

» UI-Tests sinnvoller Teil einer Gesamt-Teststrategie
Benjamin Schmid | eXXcellent solutions gmbh
Lohnen sich GUI-Tests also?

» Ja, auf jeden Fall!
Die Frage ist in welchem Umfang!

» Basis-Checks: Eigentlich Immer!
(Deployen, Starten, Login, wichtigste GUI-Pfade)
Kontinuierliche Regression des Gesamtsystems
Bereits mit einfachen Mitteln gut realisierbar!

» Ausführlichere Funktionschecks: Vor allem bei
– Projekte mit langer Laufzeit / Produktcharakter
– Kritischen Use Cases
– Kurzen Release-Zyklen
Benjamin Schmid | eXXcellent solutions gmbh
Ausblick – Tests des Gesamtprozesses
z.B. am Beispiel einer Abrechnungssoftware

Ausgangsszenario

„Auftrag
einstellen“

- Tests über die „Zeit“/
mehrere Iterationen
- Vergleich: Testsituation
vs. Referenzsituation

Testergebnis 1

Archiviertes
Referenzszenario

„Lieferung
reklamieren“

Testergebnis 2

Archiviertes
Referenzszenario

Benjamin Schmid | eXXcellent solutions gmbh
Vielen Dank für Ihre Aufmerksamkeit!
Besuchen Sie uns!

Direkt am Eingang der Ausstellung
http://www.exxcellent.de/
Referenzen & weitere Infos
»
»
»
»
»
»
»

Web Driver: code.google.com/p/webdriver/
Selenium UI Elements: ttwhy.org/home/blog/category/selenium/
XPather: addons.mozilla.org/en-US/firefox/addon/1192
Selenium User Meeting:
raibledesigns.com/rd/entry/last_night_s_selenium_users
Selenium Homepage: www.openqa.org
TestNG Homepage: www.testng.org
LiquiBase: www.liquibase.org
Benjamin Schmid | eXXcellent solutions gmbh

Weitere ähnliche Inhalte

Andere mochten auch

Progressive web and the problem of JavaScript
Progressive web and the problem of JavaScriptProgressive web and the problem of JavaScript
Progressive web and the problem of JavaScript
Christian Heilmann
 
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
Christian Heilmann
 

Andere mochten auch (20)

Windows Azure Platform WAMS v.0.5
Windows Azure Platform   WAMS v.0.5Windows Azure Platform   WAMS v.0.5
Windows Azure Platform WAMS v.0.5
 
Красноярский журнал о грузовиках Автосила №10(113) 2015
Красноярский журнал о грузовиках Автосила №10(113) 2015Красноярский журнал о грузовиках Автосила №10(113) 2015
Красноярский журнал о грузовиках Автосила №10(113) 2015
 
Vorstellung von Ember.js
Vorstellung von Ember.jsVorstellung von Ember.js
Vorstellung von Ember.js
 
Above the fold content
Above the fold contentAbove the fold content
Above the fold content
 
GEC 2016: Verne Harnish
GEC 2016: Verne HarnishGEC 2016: Verne Harnish
GEC 2016: Verne Harnish
 
Final presentation for Ordinance Survey sponsored MSc Project
Final presentation for Ordinance Survey sponsored MSc ProjectFinal presentation for Ordinance Survey sponsored MSc Project
Final presentation for Ordinance Survey sponsored MSc Project
 
Using eCognition to improve feature recognition.
Using eCognition to improve feature recognition.Using eCognition to improve feature recognition.
Using eCognition to improve feature recognition.
 
Terrestrial laser scanning
Terrestrial laser scanningTerrestrial laser scanning
Terrestrial laser scanning
 
Progressive web and the problem of JavaScript
Progressive web and the problem of JavaScriptProgressive web and the problem of JavaScript
Progressive web and the problem of JavaScript
 
Internet Days - The Depressed Internet
Internet Days - The Depressed Internet Internet Days - The Depressed Internet
Internet Days - The Depressed Internet
 
Zwischen Terminator und Star Trek: Digitalisierung und Künstliche Intelligenz
Zwischen Terminator und Star Trek: Digitalisierung und Künstliche IntelligenzZwischen Terminator und Star Trek: Digitalisierung und Künstliche Intelligenz
Zwischen Terminator und Star Trek: Digitalisierung und Künstliche Intelligenz
 
Memory leak patterns in javascript
Memory leak patterns in javascriptMemory leak patterns in javascript
Memory leak patterns in javascript
 
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
 
Ebu mpeg dash-webinar043
Ebu mpeg dash-webinar043Ebu mpeg dash-webinar043
Ebu mpeg dash-webinar043
 
Progressing JavaScript and Apps the Web way…
 Progressing JavaScript and Apps the Web way…  Progressing JavaScript and Apps the Web way…
Progressing JavaScript and Apps the Web way…
 
Suit up, bring extra oxygen Internet space explorers needed.
Suit up, bring extra oxygen Internet space explorers needed.Suit up, bring extra oxygen Internet space explorers needed.
Suit up, bring extra oxygen Internet space explorers needed.
 
High Performance Images
High Performance ImagesHigh Performance Images
High Performance Images
 
"Von Jugend an..." am A-Tag ´08
"Von Jugend an..." am A-Tag ´08"Von Jugend an..." am A-Tag ´08
"Von Jugend an..." am A-Tag ´08
 
HTML5 Video vs. Flash Video [paper]
HTML5 Video vs. Flash Video [paper]HTML5 Video vs. Flash Video [paper]
HTML5 Video vs. Flash Video [paper]
 
2009 - Modell getriebene fit tests
2009 - Modell getriebene fit tests2009 - Modell getriebene fit tests
2009 - Modell getriebene fit tests
 

Ähnlich wie Automatisierte GUI-Tests mit Selenium

Ähnlich wie Automatisierte GUI-Tests mit Selenium (20)

Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-Software
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitUI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
 
DWX 2016 - Load Testing mit Visual Studio richtig gemacht
DWX 2016 - Load Testing mit Visual Studio richtig gemachtDWX 2016 - Load Testing mit Visual Studio richtig gemacht
DWX 2016 - Load Testing mit Visual Studio richtig gemacht
 
Test-Alternativen
Test-AlternativenTest-Alternativen
Test-Alternativen
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
ScriptRunner - Eine Einführung
ScriptRunner - Eine EinführungScriptRunner - Eine Einführung
ScriptRunner - Eine Einführung
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 

Mehr von Benjamin Schmid

Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren CodeDer 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
Benjamin Schmid
 
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im ÜberblickNext Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Benjamin Schmid
 

Mehr von Benjamin Schmid (14)

Power catch up - Everything Practical and Important in Java 9 to 13
Power catch up - Everything Practical and Important in Java 9 to 13Power catch up - Everything Practical and Important in Java 9 to 13
Power catch up - Everything Practical and Important in Java 9 to 13
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
Komponentenorientierte Webanwendungen mit wingS 2.0
Komponentenorientierte Webanwendungen mit wingS 2.0 Komponentenorientierte Webanwendungen mit wingS 2.0
Komponentenorientierte Webanwendungen mit wingS 2.0
 
Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren CodeDer 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
Der 10-Punkte Plan für den sicheren Weg zum nicht-wartbaren Code
 
Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!
Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!
Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!
 
Vital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im ProjektVital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im Projekt
 
Datenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBaseDatenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBase
 
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-EntwicklungVielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
 
Scharfe Anmerkungen für Java 6 mit Lombok
Scharfe Anmerkungen für Java 6 mit LombokScharfe Anmerkungen für Java 6 mit Lombok
Scharfe Anmerkungen für Java 6 mit Lombok
 
Das lustige Überlebenshandbuch für JavaScript
Das lustige Überlebenshandbuch für JavaScriptDas lustige Überlebenshandbuch für JavaScript
Das lustige Überlebenshandbuch für JavaScript
 
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery MobileTrittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
 
Hybride Schönheit - Das Java/JavaScript Webframeworks Echo
Hybride Schönheit - Das Java/JavaScript Webframeworks EchoHybride Schönheit - Das Java/JavaScript Webframeworks Echo
Hybride Schönheit - Das Java/JavaScript Webframeworks Echo
 
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im ÜberblickNext Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
 
'Git started' für Fortgeschrittene!
'Git started' für Fortgeschrittene!'Git started' für Fortgeschrittene!
'Git started' für Fortgeschrittene!
 

Automatisierte GUI-Tests mit Selenium

  • 1. Benjamin Schmid | eXXcellent solutions gmbh Automatisierte GUI-Tests mit Selenium und TestNG in der Praxis
  • 2. Inhalt » Vision » Vorstellung der Technologien – Selenium – TestNG » Die Herausforderungen der Praxis » Plugging everything together: Live-Demo » Fazit und Ausblick Benjamin Schmid | eXXcellent solutions gmbh
  • 4. Die Technologien Selenium Benjamin Schmid | eXXcellent solutions gmbh
  • 5. Was ist Selenium » … ein Testwerkzeug für Web-Applikationen » … steuert einen Browser direkt, wie ein normaler Benutzer » … ist Freie Software / Open Source » … läuft auf: IE Firefox Konqueror Seamonkey Safari Camino Opera Bestandteile von Selenium » Core Steuerungs-Engine für den Browser (JavaScript) » IDE Scripting-Entwicklungswerkzeug (FireFox) » RC Remote Control (API für Java, C#, Python, …) » weitere Selenium Grid, … Benjamin Schmid | eXXcellent solutions gmbh
  • 6. Wie funktioniert‘s? – Selenium Core/IDE Selenium Core » 100% DHTML/JavaScript-Engine » „Bedient“ Browser, z.B.: open (url), click (locator), waitForCondition (…), keyUp (…), mouseDownAt (…), … Selenium IDE » FireFox Plugin » Scripting von Selenium Core » Autom. Record & Playback (nur bei stabilen IDs/Namen!) Benjamin Schmid | eXXcellent solutions gmbh
  • 7. Wie funktioniert‘s? – Selenium Locators Wie können Elemente auf der HTML-Seite adressiert werden » id=id » name=name » link=textPattern » css=cssSelectorSyntax » dom=javascriptExpression » xpath=xpathExpression Vor allem die XPath-Notation ist mächtig Extension Selenium UI Elements: ui=issuePages::article(index=2) Benjamin Schmid | eXXcellent solutions gmbh
  • 8. Wie funktioniert‘s? – Selenium RC » RC Server konfiguriert, startet & stoppt den gew. Browser » Injiziert via Proxy die Selenium-Core-Engine » Dient als Vermittler für die Anfragen und Befehle der RC-Clients Quelle: openqa.org Benjamin Schmid | eXXcellent solutions gmbh
  • 9. Selenium – „Standard Selenium“-Entwicklung Vom Framework nahe gelegter Entwicklungszyklus: 1. 2. 3. 4. Testpfad interaktiv mit Selenium IDE entwickeln Entwurf als Java-RC/JUnit Code exportieren Test anpassen, Prüfungen einfügen und einbinden Tests starten (RC Server, Zielapplikation und Test) Benjamin Schmid | eXXcellent solutions gmbh
  • 10. Wie funktioniert‘s? – IDE/Java-RC Skript Beispiel: Mit Selenium IDE generiertes Java RC-Skript HTML name/id Selektor <input name=„p“>..</input> IDE-generierter XPath Selektor Benjamin Schmid | eXXcellent solutions gmbh
  • 11. Wo sind die Grenzen? » Grenzen durch Sicherheitsmodelle der Browser – Host Testserver = Host App.-Server (same-origin policy/Anti-XSS) – HTTPS (Zertifikate/Injection) – Lösung: Subprojekt Web Driver (Native Engine) » Cross-Browser Funktionalität nicht ganz gratis » Bedingte Eignung für Last-Tests » Sehr positiv: Kontinuierlich steigende Aufmerksamkeit & Projektaktivität! (Heavy User: Google) Benjamin Schmid | eXXcellent solutions gmbh
  • 12. Selenium - Fazit (1/2) Browser„fernsteuerung“ echter Blackbox Test gut gewappnet für Web 2.0, Ajax, Webframeworks: – dynamische Inhalte, IDs, Layouts – Client-Logiken (Ajax, JS-Frameworks) – Proprietäre HTTP-Kommunikation Java-Bridge Selektoren (XPath) End-to-End End-to-End Gewohnte Sprachmittel/Umgebung Ideal für Funktions-/Abnahme-Tests (auch Cross-Browser-Tests) Benjamin Schmid | eXXcellent solutions gmbh
  • 13. Selenium - Fazit (2/2) Record & Playback mit Selenium IDE Komfortabler Start für einfache/kleine „Web 1.0“-Applikationen/Tests IDE Standardvorgehen: Schnell & Einfach Keine Out-of-the Box Lösung für - dynamische IDs (Echo2, wingS, …) und - langfristig stabile Tests (wechselnde HTML Layouts) It‘s free software! Ideales Konzept/Technologie Potential was Verwendung anbelangt Benjamin Schmid | eXXcellent solutions gmbh
  • 14. Die Technologien TestNG Benjamin Schmid | eXXcellent solutions gmbh
  • 15. Warum kein JUnit? » Erstes, populäres Testframework (1998, Gamma & Beck) » Quasi de facto Standard » Funktionalität rein auf Unit-Tests ausgelegt » „Opfer“ des eigenen Erfolgs: – Regelmäßiger Einsatz außerhalb echter Unit-Tests – Lange Zeit kaum Updates (3.x) – Offene Wünsche für funktionale Tests Benjamin Schmid | eXXcellent solutions gmbh
  • 16. Was ist TestNG? » Ein Testing-Framework für alle Testebenen, d.h. – Unit-Tests – Funktionale Tests – Integrations-Tests – etc. » Test-Gliederung in: Suite -> Test -> Class -> Method + parallel: Groups » JUnit3-Kompatibilitäts-Modus » Plugins für Eclipse und IntelliJ Benjamin Schmid | eXXcellent solutions gmbh
  • 17. TestNG – Strukturierung von Tests » Gruppierung mit groups – Ein- und Ausschließen von Tests & Konfigurationen – Mehrfache Gruppenzugehörigkeiten – Auswahl durch reguläre Ausdrücke: gui.* -> gui.basics, gui.longrunner,… » Abhängigkeiten/Reihenfolge mit dependsOnGroups/Methods JUnit: 1 PASSED and 9 FAILURES TestNG: 1 PASSED, 1 FAILED and 8 SKIPPED Benjamin Schmid | eXXcellent solutions gmbh
  • 18. TestNG - Konfiguration & Datenquellen » Freie Konfigurationsmethoden je Ebene: @Before/After[Suite - Method] @Before/AfterGroup » Parameter: Testausführung mit konfiguriertem Wert » DataProvider: Test-Regression mit versch. Werten @Test(dataProvider= “user-agents”) public void verifyUserAgent(String s, int code) { assert getReturnCodeFor(s) == code; } Benjamin Schmid | eXXcellent solutions gmbh
  • 19. Weitere interessante Features in TestNG » Parallelität und Multithreading @Test(invocationCount=1000, threadPoolSize=10) » Erfolgsquoten @Test(invocationCount=100, successPercentage=95) » Maximale Ausführungszeiten / Timeouts @Test(timeOut=10000) » Automatischer generierte Testsuite der zuletzt fehlgeschlagenen Tests testng-failed.xml » Eigene Factories zur Test-Instanziierung Benjamin Schmid | eXXcellent solutions gmbh
  • 20. TestNG – All-in-one Beispiel Benjamin Schmid | eXXcellent solutions gmbh
  • 21. TestNG - Fazit » TestNG deckt deutlich mehr als nur Unit-Tests ab » Für unseren Fall besonders attraktive Vorteile: Gruppen DataProvider Multi-Threading Plugin-API („GUI“, „Business“, „QuickTests“) (Test-Regression mit versch. Daten) ( Selenium Grid) (Eigene Test-Reports, …) Grenzen: DataProvider + Dependencies Factory Für unsere Anforderungen gegenüber JUnit deutlich überlegen Benjamin Schmid | eXXcellent solutions gmbh
  • 22. Die Herausforderungen der Praxis Benjamin Schmid | eXXcellent solutions gmbh
  • 23. Challenge #1: Effiziente GUI-Test Erstellung » Aufgezeichnete bzw. manuell codierte Selektoren problematisch: – – – – XPath & HTML-Wissen zum Verständnis erforderlich Ohne stabile & sprechende HTML IDs sehr komplex Nicht selbsterklärend; Blick in HTML-Seite notwendig Anfällig gegenüber Änderung am Layout/HTML-Code Wunsch: » Einfache und selbsterklärende API für Jedermann » Einmal geschriebene Test sollen robust gegenüber internen Änderungen sein Benjamin Schmid | eXXcellent solutions gmbh
  • 24. Lösung #1: Abstraktion der HTML Seite/Widgets Sammlung semantischer UI-Elemente als Fassade über Selenium (Menü, Button, Textfeld) – Elemente „wissen“ um ihre HTML-Representation (Projekt & Framework-Spezifisch) – Transformieren ihr Adresse in passende XPath-Ausdrücke Test Code (Klartext) Code (Klartext) Test Code (Klartext) Test textfield.enter („Login“,“password“) Test Code (Klartext) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) textfield.enter („Login“,“password“) Textfield Widget Abstraktion (XPath) table[@class[contains(.,‚K1')] table[@class[contains(.,‚K1')] [span:contains(.,‚Login')]… [span:contains(.,‚Login')]… Browser/Selenium Core <table class=K1><span>Login</span> <table class=K1><span>Login</span> <input id=z1/> <input id=z1/> Selenium RC type(„table[@class…“,“password“) type(„table[@class…“,“password“) Benjamin Schmid | eXXcellent solutions gmbh
  • 25. DSL – Ein Beispiel Benjamin Schmid | eXXcellent solutions gmbh
  • 26. Herausforderung #2: Die Nachvollziehbarkeit » Unbeaufsichtigte Ausführung automatischer GUI-Tests » Vielschichtige Testabdeckung Viele Fehlerpotentiale regelmäßige Fehleranalyse notwendig Wunsch nach Transparenz: Einfaches nachvollziehen & verstehen von: » was passiert? und in welchem Kontext? » was schlägt fehl? Benjamin Schmid | eXXcellent solutions gmbh
  • 27. Lösung #2 Transparenz schaffen: » Lesbarer Test & Ablaufprotokoll durch semantische API und Logmessages » Anreicherung des Ablaufprotokolls um Screenshots » Archivierung: Ablaufprotokoll, Applikatonslog, etc. Umsetzung: – Screenshots via Logging – Modifizierter TestNG TestReporter Benjamin Schmid | eXXcellent solutions gmbh
  • 28. Herausforderung #3: Die grüne Wiese » Tests in datenlosen Systemen wenig gewinnbringend » Sinnvolle Quellen von Testdaten: – künstlich erzeugte Datenszenarien: Aufwändig zu konstruieren; definierte Konstellation – produktionsnahe Echt-Daten: realitätsnahe Mengengerüste; Stichproben geiignet » Es gilt bei Bedarf die umfangreiche Datenszenarios schnell wieder herstellen zu können, welche die Grundlage für den jeweiligen Test bildeten Benjamin Schmid | eXXcellent solutions gmbh
  • 29. Lösung #3: Snapshots und RDBMS Refactoring Snapshot-Mechanismen von Datenbanken – MS SQL: „Database Snapshots“ (ab SQL Server Enterprise/Developer) – Oracle: „Oracle Flashback“ (ab Oracle 10gR2) MS SQL: Snapshot Rollback von 20GB in ~1 Min! Automatische und Verlustfreie Migration – Automatische Migration der archivierten Datenszenarios an aktuelles RDBMS Schema LiquBase Benjamin Schmid | eXXcellent solutions gmbh
  • 30. Herausforderung #4: Pluggin‘ all together Server sicher stoppen SoftwareÄnderung Test-Feedback Datensituation + Migration Ne ue Testauswertung sts Autom. Testzyklus Applikation deployen Te Log-/ReportArchivierung Ablauf protokollieren Test Server starten (Appl, RC) Start abwarten Benjamin Schmid | eXXcellent solutions gmbh
  • 31. Live Demo Benjamin Schmid | eXXcellent solutions gmbh
  • 32. Fazit und Ausblick Benjamin Schmid | eXXcellent solutions gmbh
  • 33. Erfahrungen aus der Praxis Erfahrungen im Projekt: » Gute Projekt-Akzeptanz » Einfach: Selbst Projektleiter entwirft UI-Tests [im Zug] » Hoher Reuse-Anteil dank Abstraktion des Konzepts Technische Pitfalls: » Autom. Integrationsprozess (Tomcat, etc.) » MS IE (XPath im deadly slow, delikat) » Selenium Feinheiten: (fehlende waitfor(), …) Benjamin Schmid | eXXcellent solutions gmbh
  • 34. Lohnen sich automatisierte GUI-Tests? » Generell: GUI-Tests sind – fragil, aufwendig & langsam – Dafür aber auch umfassend und realistisch » UI-Tests ersetzen keine Unit-/Abnahme-/Tests! – Unit-Tests sind wertvolle White-Box Tests und sollten nicht vernachlässigt werden! – Schnelle & einfache Basis für weitere Tests » UI-Tests sinnvoller Teil einer Gesamt-Teststrategie Benjamin Schmid | eXXcellent solutions gmbh
  • 35. Lohnen sich GUI-Tests also? » Ja, auf jeden Fall! Die Frage ist in welchem Umfang! » Basis-Checks: Eigentlich Immer! (Deployen, Starten, Login, wichtigste GUI-Pfade) Kontinuierliche Regression des Gesamtsystems Bereits mit einfachen Mitteln gut realisierbar! » Ausführlichere Funktionschecks: Vor allem bei – Projekte mit langer Laufzeit / Produktcharakter – Kritischen Use Cases – Kurzen Release-Zyklen Benjamin Schmid | eXXcellent solutions gmbh
  • 36. Ausblick – Tests des Gesamtprozesses z.B. am Beispiel einer Abrechnungssoftware Ausgangsszenario „Auftrag einstellen“ - Tests über die „Zeit“/ mehrere Iterationen - Vergleich: Testsituation vs. Referenzsituation Testergebnis 1 Archiviertes Referenzszenario „Lieferung reklamieren“ Testergebnis 2 Archiviertes Referenzszenario Benjamin Schmid | eXXcellent solutions gmbh
  • 37. Vielen Dank für Ihre Aufmerksamkeit! Besuchen Sie uns! Direkt am Eingang der Ausstellung http://www.exxcellent.de/ Referenzen & weitere Infos » » » » » » » Web Driver: code.google.com/p/webdriver/ Selenium UI Elements: ttwhy.org/home/blog/category/selenium/ XPather: addons.mozilla.org/en-US/firefox/addon/1192 Selenium User Meeting: raibledesigns.com/rd/entry/last_night_s_selenium_users Selenium Homepage: www.openqa.org TestNG Homepage: www.testng.org LiquiBase: www.liquibase.org Benjamin Schmid | eXXcellent solutions gmbh