SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Softwerkskammer Hamburg 
Testen von Rich-Web-UIs 
Mark Michaelis 
Kudos to Martti Jeenicke 
© CoreMedia | 2014-10-21 | 1 www.coremedia.com
Dev@CoreMedia
Dev@CoreMedia 
 Entwickler sind für QA verantwortlich 
 keine dedizierte QA-Abteilung 
 5 Topic-Teams 
 Git als VCS 
 Feature-Entwicklung auf Branches 
© CoreMedia | 2014-10-21 | 3 www.coremedia.com
Dev@CoreMedia - Pipelines 
 verschiedene Pipeline-Patterns 
 pro Team ca. 4 Pipelines, jeweils mit UI-Tests: 
 Story-Merge-Pipeline 
 Single-Story-Pipeline 
 Fixes-Merge-Pipeline 
 Master-Pipeline 
 weiterhin: 
 Master-Pipeline 
 Release-Pipeline 
© CoreMedia | 2014-10-21 | 4 www.coremedia.com
Produkt
Frontend Beispiel: CoreMedia Studio 
© CoreMedia | 2014-10-21 | 6 www.coremedia.com
Anwendungsarchitektur 
Studio-Server 
(WebApp) 
Client (Browser) 
Content 
REST Service 
Presentation 
Remoting 
ExtJS 
MVC 
AJAX Request 
Backend Services 
JSON 
… 
Content 
Server 
Search 
© CoreMedia | 2014-10-21 | 7 www.coremedia.com
Lebenszyklus 
 Versionen derzeit: 
 mehrere Versionen im Extended Support (bis zu RD 2005) 
 2 in Maintenance-Phase 
 Erstes Release Oktober 2012 
 Erstes Release September 2014 
 1 in Entwicklungs-Phase 
© CoreMedia | 2014-10-21 | 8 www.coremedia.com
Testen von 
UI-Komponenten
Technischer Rahmen 
 Test-Setup durch viele Applikationsschichten: 
 Content-Server 
 Search-Server 
 Web-Application-Server (Tomcat, Websphere) 
 Browser/UI 
 Selenium/WebDriver als Basis-Technologie 
© CoreMedia | 2014-10-21 | 10 www.coremedia.com
Framework-Design Prinzipien 
Simplicity 
Born 
to Fail 
Succeed 
Fast 
Extensible 
Reusable 
© CoreMedia | 2014-10-21 | 11 www.coremedia.com
UI-Tests 
schichtweise
Oben: Manuell reproduzierbare Tests 
@Test 
void scenario_document_change_updates_date() { 
Reference<Document> doc = ref(); 
given_document_D_exists(doc); 
given_document_D_is_opened(doc); 
when_I_change_document_D(doc); 
then_modification_date_of_document_D_is_updated(doc); 
} 
© CoreMedia | 2014-10-21 | 13 www.coremedia.com
Mitte: Warte-Pattern 
für Server als auch UI 
@Test 
void scenario_document_change_updates_date() { 
Reference<Document> doc = ref(); 
given_document_D_exists(doc); 
given_document_D_is_opened(doc); 
when_I_change_document_D(doc); 
then_modification_date_of_document_D_is_updated(doc); 
} 
searchServiceWrapper 
.indexed(doc) 
.waitUntil(is(true)); 
© CoreMedia | 2014-10-21 | 14 www.coremedia.com
Mitte: UI-Wrapper 
Verwendung 
@Test 
void scenario_document_change_updates_date() { 
Reference<Document> doc = ref(); 
given_document_D_exists(doc); 
given_document_D_is_opened(doc); 
when_I_change_document_D(doc); 
then_modification_date_of_document_D_is_updated(doc); 
} 
@Inject DocumentPanel panel; 
TextField field = panel.getTextField(); 
field.write(„lorem“); 
panel.saveDocument(); 
© CoreMedia | 2014-10-21 | 15 www.coremedia.com
Mitte: UI-Wraper 
Entwicklung 
@Test 
void scenario_document_change_updates_date() { 
@ExtJSObject(id = „docPanel“) 
DocumentPanel extends ExtPanel { 
Reference<Document> doc = ref(); 
@FindByExtJS(itemId=„save“) Button saveButton; 
given_document_D_exists(doc); 
given_document_D_is_opened(doc); 
when_I_change_document_D(doc); 
then_modification_date_of_document_D_is_updated(doc); 
} 
saveDocument() { 
saveButton.click(); 
@Inject DocumentPanel panel; 
TextField field = panel.getTextField(); 
field.write(„lorem“); 
panel.saveDocument(); 
} 
© CoreMedia | 2014-10-21 | 16 www.coremedia.com
Unten: Generiertes JavaScript 
Code, den keiner sieht… 
self = Ext.getCmp(„panel“); 
key = „itemId“; value = „save“; 
btn = (self.find && self.find(key, value)[0]) 
|| (self.buttons 
&& self.buttons.filter( 
function(b){return b[key] && b[key]==value})[0]) 
|| (self.items 
&& self.items.filter(key, value).get(0)); 
© CoreMedia | 2014-10-21 | 17 www.coremedia.com
Warte, warte nur 
ein Weilchen…
WebDriver Wait Pattern 
Unklare Verantwortlichkeiten 
© CoreMedia | 2014-10-21 | 19 www.coremedia.com
Joala Wait-Pattern 
Klare Verantwortlichkeiten 
© CoreMedia | 2014-10-21 | 20 www.coremedia.com
Wait Pattern 
Vergleich 
© CoreMedia | 2014-10-21 | 21 www.coremedia.com
Wait-Pattern 
Terminierung in Joala 
© CoreMedia | 2014-10-21 | 22 www.coremedia.com
Was der Tester wissen muss… 
WebDriver 
© CoreMedia | 2014-10-21 | 23 www.coremedia.com
Was der Tester wissen muss… 
Joala 
© CoreMedia | 2014-10-21 | 24 www.coremedia.com
Test-Pyramide
Test-Pyramide (nach Mike Cohn) 
Manual 
UI 
Service 
Unit 
© CoreMedia | 2014-10-21 | 26 www.coremedia.com
Test-Pyramide (nach Mike Cohn) 
Manual 
UI 
Service 
Unit 
 600 UI-Tests 
 200 Integration 
 2000 System 
 10000 JUnit 
 600 JooUnit 
 1 Team (von 5): 
 25 Einzeltests 
 5 Stories, 30 Steps 
 20 explorativ 
© CoreMedia | 2014-10-21 | 27 www.coremedia.com
Infrastruktur
Infrastruktur – Das Grid 
 1 zentrales Se-Grid 
 Wartung durch eines der Topic-Teams 
(das Team mit dem größten Se-Know-How) 
 10 Xvfb+Firefox Nodes 
 8 IE Nodes basierend auf modern.ie 
Konzept angelehnt an conceptsandtraining/modernie_selenium 
© CoreMedia | 2014-10-21 | 29 www.coremedia.com
Infrastruktur – Erfahrungen 
 Virtuelle Windows-Nodes mit rdesktop sind potentiell gefährlich 
 nur per Skript aufgesetzte Systeme schaffen Stabilität 
 Firefox + Xvfb läuft “wartungsfrei” seit vielen Monaten 
© CoreMedia | 2014-10-21 | 30 www.coremedia.com
Infrastruktur – Firefox & Xvfb 
 Xvfb installieren 
 CentOS, required: libXfont und xorg-x11-fonts 
 Ubuntu, required: xfonts-* 
 alte Xvfb-Version (z. B. CentOS) benötigt Patch für 
Bug #337703 
 Openbox – benötigt, etwa um Fenster maximieren zu können 
 Optional: xwud, um auf Framebuffer-Images zugreifen zu 
können 
 gtk2-engines: Benötigt für Openbox, falls der Fehler 
Xlib: extension "RANDR" missing on display ":105“ 
auftritt. 
© CoreMedia | 2014-10-21 | 31 www.coremedia.com
Infrastruktur – Firefox & Xvfb 
Skript-Skizze 
function start_wm() { 
openbox & 
# remember PID 
} 
function start_selenium_node() { 
start_wm 
start_selenium # java –jar …, not in background! 
kill_wm 
} 
function start_selenium_node() { 
bash xvfb [options] xvfb_subcommand & 
} 
© CoreMedia | 2014-10-21 | 32 www.coremedia.com
Links
Referenzen (1) 
 The Forgotten Layer of the Test Automation Pyramid 
Mike Cohn, 2009 
 TestPyramid 
Martin Fowler, 2012 
 WebDriver: Advanced Usage — Selenium Documentation, 
Explicit and Implicit Waits 
 Joala 
u. a. Referenzimplementierung Warte-Pattern 
 Jangaroo 
u. a. JooUnit 
© CoreMedia | 2014-10-21 | 34 www.coremedia.com
Referenzen (2) 
 conceptsandtraining/modernie_selenium 
modern.ie VBox-VM-Setup 
 Modern.IE : Interoperabilität, Browser & Cross Platform Testing 
© CoreMedia | 2014-10-21 | 35 www.coremedia.com
Weitere Informationen 
 SoCraTes 2014: Testing Rich-Web-UI 
Mark Michaelis 
 Death to sleeps! Raise of Conditions! | Minds 
Mark Michaelis 
 Selenium Server as Windows Service via NSSM | Minds 
Mark Michaelis 
 Meetup Softwerkskammer HH: Collected Thoughts on Testing 
Pyramid | Minds 
Mark Michaelis 
 The Calm after the Storm | Minds 
Olaf Kummer 
 Haste makes waste | Minds 
Olaf Kummer 
 Entwickler entdecken UI-Testing 
Mark Michaelis, Testing Experience DE 4/2014, S. 12ff 
© CoreMedia | 2014-10-21 | 36 www.coremedia.com
Erfahrung
Erfahrung 
 UI-Tests sind heute deutlich weniger Thema in der Test- 
Ergebnis-Analyse 
 Analyse der Infrastruktur ist nicht mehr notwendig 
 keine „Heisenbugs“ mehr 
 Nichtsdestotrotz: Auch im jüngsten Sprint mussten wir 
Maßnahmen beschließen, um mit „Wacklern“ umzugehen. 
 (Zu)viel Investition in UI-Tests verführt: 
“Ich schreibe lieber einen UI-Test, als…” (Entwickler-Zitat) 
© CoreMedia | 2014-10-21 | 38 www.coremedia.com
CONTENT | CONTEXT | CONVERSION 
Mark Michaelis 
about.me/michaelismark 
© CoreMedia | 2014-10-21 | 39 www.coremedia.com
Bonusmaterial
Wait-Pattern 
Terminierung in WebDriver 
© CoreMedia | 2014-10-21 | 41 www.coremedia.com

Weitere ähnliche Inhalte

Andere mochten auch

Browse E-Commerce Plattform für den stationären Fashion Handel
Browse E-Commerce Plattform für den stationären Fashion HandelBrowse E-Commerce Plattform für den stationären Fashion Handel
Browse E-Commerce Plattform für den stationären Fashion HandelBernd Gemmer
 
Wer zuerst wirbt, verkauft zuerst!
Wer zuerst wirbt, verkauft zuerst! Wer zuerst wirbt, verkauft zuerst!
Wer zuerst wirbt, verkauft zuerst! hennysports
 
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...eBusiness-Lotse Darmstadt-Dieburg
 
Online marketing workshop startplatz köln skillday.de
Online marketing workshop startplatz köln  skillday.deOnline marketing workshop startplatz köln  skillday.de
Online marketing workshop startplatz köln skillday.deSkill Day
 
How much food do we waste
How much food do we wasteHow much food do we waste
How much food do we wasteJessica161
 
Digitale Transformation im Gesundheitswesen
Digitale Transformation im GesundheitswesenDigitale Transformation im Gesundheitswesen
Digitale Transformation im GesundheitswesenHans Peter Knaust
 
Folgen der Medienkrise für die Kommunikation in der Finanzbranche
Folgen der Medienkrise für die Kommunikation in der FinanzbrancheFolgen der Medienkrise für die Kommunikation in der Finanzbranche
Folgen der Medienkrise für die Kommunikation in der Finanzbrancheergo Kommunikation
 
Platura_Woche2
Platura_Woche2Platura_Woche2
Platura_Woche2wuggi
 
Transit prestasi pelajar
Transit prestasi pelajarTransit prestasi pelajar
Transit prestasi pelajarnorazieyra
 
Transit prestasi ba thn 2 2013
Transit prestasi  ba  thn 2 2013Transit prestasi  ba  thn 2 2013
Transit prestasi ba thn 2 2013norazieyra
 
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014Cdu Birkenwerder
 
Erstellen sie eine unverbindliche offerte
Erstellen sie eine unverbindliche offerteErstellen sie eine unverbindliche offerte
Erstellen sie eine unverbindliche offertejolie111
 
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014kontakt_tutilbun
 

Andere mochten auch (17)

Browse E-Commerce Plattform für den stationären Fashion Handel
Browse E-Commerce Plattform für den stationären Fashion HandelBrowse E-Commerce Plattform für den stationären Fashion Handel
Browse E-Commerce Plattform für den stationären Fashion Handel
 
Wer zuerst wirbt, verkauft zuerst!
Wer zuerst wirbt, verkauft zuerst! Wer zuerst wirbt, verkauft zuerst!
Wer zuerst wirbt, verkauft zuerst!
 
Dresden #4
Dresden #4Dresden #4
Dresden #4
 
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...
eBusiness Lösung - Erklärvideo Mittels kurzer Videos komplexe Themen leicht v...
 
Online marketing workshop startplatz köln skillday.de
Online marketing workshop startplatz köln  skillday.deOnline marketing workshop startplatz köln  skillday.de
Online marketing workshop startplatz köln skillday.de
 
How much food do we waste
How much food do we wasteHow much food do we waste
How much food do we waste
 
Digitale Transformation im Gesundheitswesen
Digitale Transformation im GesundheitswesenDigitale Transformation im Gesundheitswesen
Digitale Transformation im Gesundheitswesen
 
Folgen der Medienkrise für die Kommunikation in der Finanzbranche
Folgen der Medienkrise für die Kommunikation in der FinanzbrancheFolgen der Medienkrise für die Kommunikation in der Finanzbranche
Folgen der Medienkrise für die Kommunikation in der Finanzbranche
 
Platura_Woche2
Platura_Woche2Platura_Woche2
Platura_Woche2
 
Dresden #1
Dresden #1Dresden #1
Dresden #1
 
Up2015 UX in Kanban
Up2015 UX in KanbanUp2015 UX in Kanban
Up2015 UX in Kanban
 
Transit prestasi pelajar
Transit prestasi pelajarTransit prestasi pelajar
Transit prestasi pelajar
 
Transit prestasi ba thn 2 2013
Transit prestasi  ba  thn 2 2013Transit prestasi  ba  thn 2 2013
Transit prestasi ba thn 2 2013
 
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014
Unser Briesebote 02 - Zeitung der CDU Birkenwerder - Frühling 2014
 
Erstellen sie eine unverbindliche offerte
Erstellen sie eine unverbindliche offerteErstellen sie eine unverbindliche offerte
Erstellen sie eine unverbindliche offerte
 
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014
Geschenke und Mitbringsel für Personen im Ausland | Umfrage 2014
 
NUESTRAS OBRAS DE ARTE
NUESTRAS OBRAS DE ARTENUESTRAS OBRAS DE ARTE
NUESTRAS OBRAS DE ARTE
 

Ähnlich wie SokaHH: Testen von Rich-Web-UI (German)

Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieCitrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieDigicomp Academy AG
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien DNUG e.V.
 
Modulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungModulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungAndreas Weidinger
 
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...Marc Müller
 
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 2013Nico Orschel
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationGWAVA
 
IBM Notes Domino & Verse Update
IBM Notes Domino & Verse UpdateIBM Notes Domino & Verse Update
IBM Notes Domino & Verse Updateeschwalb
 
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)Peter Kirchner
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampWerner Keil
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"joergreichert
 
Die besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDie besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDieter Ziegler
 
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Andreas Weidinger
 
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisSicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisJomaSoft
 
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...Marc Müller
 

Ähnlich wie SokaHH: Testen von Rich-Web-UI (German) (20)

Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieCitrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
 
Modulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungModulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine Einführung
 
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...
 
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
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
IBM Notes Domino & Verse Update
IBM Notes Domino & Verse UpdateIBM Notes Domino & Verse Update
IBM Notes Domino & Verse Update
 
Citrix Day 2014: APPDNA
Citrix Day 2014: APPDNACitrix Day 2014: APPDNA
Citrix Day 2014: APPDNA
 
Infrastructure Solution Day | Core
Infrastructure Solution Day | CoreInfrastructure Solution Day | Core
Infrastructure Solution Day | Core
 
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 2 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)
Das eigene Test Lab, für jeden! (CeBIT-Edition mit Demo-Videos)
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
 
Governance
GovernanceGovernance
Governance
 
Die besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDie besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-Apps
 
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
 
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisSicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
 
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...
 

SokaHH: Testen von Rich-Web-UI (German)

  • 1. Softwerkskammer Hamburg Testen von Rich-Web-UIs Mark Michaelis Kudos to Martti Jeenicke © CoreMedia | 2014-10-21 | 1 www.coremedia.com
  • 3. Dev@CoreMedia  Entwickler sind für QA verantwortlich  keine dedizierte QA-Abteilung  5 Topic-Teams  Git als VCS  Feature-Entwicklung auf Branches © CoreMedia | 2014-10-21 | 3 www.coremedia.com
  • 4. Dev@CoreMedia - Pipelines  verschiedene Pipeline-Patterns  pro Team ca. 4 Pipelines, jeweils mit UI-Tests:  Story-Merge-Pipeline  Single-Story-Pipeline  Fixes-Merge-Pipeline  Master-Pipeline  weiterhin:  Master-Pipeline  Release-Pipeline © CoreMedia | 2014-10-21 | 4 www.coremedia.com
  • 6. Frontend Beispiel: CoreMedia Studio © CoreMedia | 2014-10-21 | 6 www.coremedia.com
  • 7. Anwendungsarchitektur Studio-Server (WebApp) Client (Browser) Content REST Service Presentation Remoting ExtJS MVC AJAX Request Backend Services JSON … Content Server Search © CoreMedia | 2014-10-21 | 7 www.coremedia.com
  • 8. Lebenszyklus  Versionen derzeit:  mehrere Versionen im Extended Support (bis zu RD 2005)  2 in Maintenance-Phase  Erstes Release Oktober 2012  Erstes Release September 2014  1 in Entwicklungs-Phase © CoreMedia | 2014-10-21 | 8 www.coremedia.com
  • 10. Technischer Rahmen  Test-Setup durch viele Applikationsschichten:  Content-Server  Search-Server  Web-Application-Server (Tomcat, Websphere)  Browser/UI  Selenium/WebDriver als Basis-Technologie © CoreMedia | 2014-10-21 | 10 www.coremedia.com
  • 11. Framework-Design Prinzipien Simplicity Born to Fail Succeed Fast Extensible Reusable © CoreMedia | 2014-10-21 | 11 www.coremedia.com
  • 13. Oben: Manuell reproduzierbare Tests @Test void scenario_document_change_updates_date() { Reference<Document> doc = ref(); given_document_D_exists(doc); given_document_D_is_opened(doc); when_I_change_document_D(doc); then_modification_date_of_document_D_is_updated(doc); } © CoreMedia | 2014-10-21 | 13 www.coremedia.com
  • 14. Mitte: Warte-Pattern für Server als auch UI @Test void scenario_document_change_updates_date() { Reference<Document> doc = ref(); given_document_D_exists(doc); given_document_D_is_opened(doc); when_I_change_document_D(doc); then_modification_date_of_document_D_is_updated(doc); } searchServiceWrapper .indexed(doc) .waitUntil(is(true)); © CoreMedia | 2014-10-21 | 14 www.coremedia.com
  • 15. Mitte: UI-Wrapper Verwendung @Test void scenario_document_change_updates_date() { Reference<Document> doc = ref(); given_document_D_exists(doc); given_document_D_is_opened(doc); when_I_change_document_D(doc); then_modification_date_of_document_D_is_updated(doc); } @Inject DocumentPanel panel; TextField field = panel.getTextField(); field.write(„lorem“); panel.saveDocument(); © CoreMedia | 2014-10-21 | 15 www.coremedia.com
  • 16. Mitte: UI-Wraper Entwicklung @Test void scenario_document_change_updates_date() { @ExtJSObject(id = „docPanel“) DocumentPanel extends ExtPanel { Reference<Document> doc = ref(); @FindByExtJS(itemId=„save“) Button saveButton; given_document_D_exists(doc); given_document_D_is_opened(doc); when_I_change_document_D(doc); then_modification_date_of_document_D_is_updated(doc); } saveDocument() { saveButton.click(); @Inject DocumentPanel panel; TextField field = panel.getTextField(); field.write(„lorem“); panel.saveDocument(); } © CoreMedia | 2014-10-21 | 16 www.coremedia.com
  • 17. Unten: Generiertes JavaScript Code, den keiner sieht… self = Ext.getCmp(„panel“); key = „itemId“; value = „save“; btn = (self.find && self.find(key, value)[0]) || (self.buttons && self.buttons.filter( function(b){return b[key] && b[key]==value})[0]) || (self.items && self.items.filter(key, value).get(0)); © CoreMedia | 2014-10-21 | 17 www.coremedia.com
  • 18. Warte, warte nur ein Weilchen…
  • 19. WebDriver Wait Pattern Unklare Verantwortlichkeiten © CoreMedia | 2014-10-21 | 19 www.coremedia.com
  • 20. Joala Wait-Pattern Klare Verantwortlichkeiten © CoreMedia | 2014-10-21 | 20 www.coremedia.com
  • 21. Wait Pattern Vergleich © CoreMedia | 2014-10-21 | 21 www.coremedia.com
  • 22. Wait-Pattern Terminierung in Joala © CoreMedia | 2014-10-21 | 22 www.coremedia.com
  • 23. Was der Tester wissen muss… WebDriver © CoreMedia | 2014-10-21 | 23 www.coremedia.com
  • 24. Was der Tester wissen muss… Joala © CoreMedia | 2014-10-21 | 24 www.coremedia.com
  • 26. Test-Pyramide (nach Mike Cohn) Manual UI Service Unit © CoreMedia | 2014-10-21 | 26 www.coremedia.com
  • 27. Test-Pyramide (nach Mike Cohn) Manual UI Service Unit  600 UI-Tests  200 Integration  2000 System  10000 JUnit  600 JooUnit  1 Team (von 5):  25 Einzeltests  5 Stories, 30 Steps  20 explorativ © CoreMedia | 2014-10-21 | 27 www.coremedia.com
  • 29. Infrastruktur – Das Grid  1 zentrales Se-Grid  Wartung durch eines der Topic-Teams (das Team mit dem größten Se-Know-How)  10 Xvfb+Firefox Nodes  8 IE Nodes basierend auf modern.ie Konzept angelehnt an conceptsandtraining/modernie_selenium © CoreMedia | 2014-10-21 | 29 www.coremedia.com
  • 30. Infrastruktur – Erfahrungen  Virtuelle Windows-Nodes mit rdesktop sind potentiell gefährlich  nur per Skript aufgesetzte Systeme schaffen Stabilität  Firefox + Xvfb läuft “wartungsfrei” seit vielen Monaten © CoreMedia | 2014-10-21 | 30 www.coremedia.com
  • 31. Infrastruktur – Firefox & Xvfb  Xvfb installieren  CentOS, required: libXfont und xorg-x11-fonts  Ubuntu, required: xfonts-*  alte Xvfb-Version (z. B. CentOS) benötigt Patch für Bug #337703  Openbox – benötigt, etwa um Fenster maximieren zu können  Optional: xwud, um auf Framebuffer-Images zugreifen zu können  gtk2-engines: Benötigt für Openbox, falls der Fehler Xlib: extension "RANDR" missing on display ":105“ auftritt. © CoreMedia | 2014-10-21 | 31 www.coremedia.com
  • 32. Infrastruktur – Firefox & Xvfb Skript-Skizze function start_wm() { openbox & # remember PID } function start_selenium_node() { start_wm start_selenium # java –jar …, not in background! kill_wm } function start_selenium_node() { bash xvfb [options] xvfb_subcommand & } © CoreMedia | 2014-10-21 | 32 www.coremedia.com
  • 33. Links
  • 34. Referenzen (1)  The Forgotten Layer of the Test Automation Pyramid Mike Cohn, 2009  TestPyramid Martin Fowler, 2012  WebDriver: Advanced Usage — Selenium Documentation, Explicit and Implicit Waits  Joala u. a. Referenzimplementierung Warte-Pattern  Jangaroo u. a. JooUnit © CoreMedia | 2014-10-21 | 34 www.coremedia.com
  • 35. Referenzen (2)  conceptsandtraining/modernie_selenium modern.ie VBox-VM-Setup  Modern.IE : Interoperabilität, Browser & Cross Platform Testing © CoreMedia | 2014-10-21 | 35 www.coremedia.com
  • 36. Weitere Informationen  SoCraTes 2014: Testing Rich-Web-UI Mark Michaelis  Death to sleeps! Raise of Conditions! | Minds Mark Michaelis  Selenium Server as Windows Service via NSSM | Minds Mark Michaelis  Meetup Softwerkskammer HH: Collected Thoughts on Testing Pyramid | Minds Mark Michaelis  The Calm after the Storm | Minds Olaf Kummer  Haste makes waste | Minds Olaf Kummer  Entwickler entdecken UI-Testing Mark Michaelis, Testing Experience DE 4/2014, S. 12ff © CoreMedia | 2014-10-21 | 36 www.coremedia.com
  • 38. Erfahrung  UI-Tests sind heute deutlich weniger Thema in der Test- Ergebnis-Analyse  Analyse der Infrastruktur ist nicht mehr notwendig  keine „Heisenbugs“ mehr  Nichtsdestotrotz: Auch im jüngsten Sprint mussten wir Maßnahmen beschließen, um mit „Wacklern“ umzugehen.  (Zu)viel Investition in UI-Tests verführt: “Ich schreibe lieber einen UI-Test, als…” (Entwickler-Zitat) © CoreMedia | 2014-10-21 | 38 www.coremedia.com
  • 39. CONTENT | CONTEXT | CONVERSION Mark Michaelis about.me/michaelismark © CoreMedia | 2014-10-21 | 39 www.coremedia.com
  • 41. Wait-Pattern Terminierung in WebDriver © CoreMedia | 2014-10-21 | 41 www.coremedia.com

Hinweis der Redaktion

  1. Pipeline-Patterns: z. B. „schnelle“ Pipelines ohne Integrations-/UI-Tests und „Full-Pipelines“. Story-Merge: Alle Sprint-Story-Branches werden gemergt und damit ein Testsystem aufgesetzt und Tests gefahren Single-Story: benötigt insbesondere für große oder konfliktträchtige Stories Fixes-Merge: Bugfix-Branches werden hier gemergt und darauf die volle CI gestartet Master: „Kopie“ des Master-Systems, für mehr Kontrolle vom Team aus. Release-Pipeline: Enthält einen für gut befundenen Master-Stand + Fix-Commits
  2. unsere UI-Test-Sprache in Anlehnung an Gherkin (siehe Cucumber, JBehave) Vorteil: Im Fehlerfall leicht manuell nachzustellen. Vorteil zu Cucumber: Steps und Implementierung in Java – und meist in einer Klasse
  3. Globaler Timeout Warte-Pattern für Server und UI identisch API in Anlehnung an JUnit
  4. Komplexität in Wrappern versteckt Tests zu schreiben wird damit zum Kinderspiel
  5. Wrapper-Entwicklung ebenfalls einfach gestaltet
  6. Test- und Wrapper-Entwickler sehen dies JavaScript nicht – nur bei Debugging-Ausgabe
  7. Hannoveraner wissen, was ich meine…
  8. z. B. Expression: SUT-Kontakt Soll-/Ist-Vergleich explizite Behandlung von Exception-Ignore siehe http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp siehe https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java
  9. Expression: einziger Kontakt zur SUT signalisiert: Erfolg Unbehebbarer Fehler Behebbarer Fehler (z. B. durch Warten) Keine Exception wird “verschluckt”. Condition wird über alle Exceptions informiert, Expression schlägt nur vor, dass man sie ignorieren könnte. Matcher: bekannte API: Hamcrest Soll-/Ist-Vergleich Condition: ggf. Wiederholung Caching Expression-Ergebnisse für Fehlerreports Überprüfung Timeout
  10. ExpressionEvaluationException: Vorschlag von Expression an Condition, dass eine Wiederholung zum Erfolg führen könnte. Exception: Unbehebbarer Fehler
  11. Grün: Test-Autor Blau: Wrapper-Autor ggf. in Personalunion
  12. Balance wichtig: Zu viele UI-Tests sind teuer in Erstellung und vor allem Pflege
  13. Balance wichtig: Zu viele UI-Tests sind teuer in Erstellung und vor allem Pflege Manuelle Tests ergänzt etwa durch Test-Fest, etc.