SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Robustes Testen mitRobustes Testen mit
SeleniumSelenium
Stabilisierung und Skalierung einer TestlandschaftStabilisierung und Skalierung einer Testlandschaft
Urs LangeUrs Lange
Teamleader DevOps @ United PlanetTeamleader DevOps @ United Planet
Selenium?
https://www.seleniumhq.org/selenium-rc.png
Agenda
• Ausgangslage und Ziele
• Stabilisierung
• Skalierung
• Aktueller Stand und Ausblick
Ausgangslage
2017:
• Selenium IDE Tests
• Ausführung mit Selenium Standalone Server
• Installation der Applikation per ANT Skript
• Steuerung über Jenkins, auf Windows Server mit GUI
Ausgangslage
Probleme
• Umständlich
• Pflege-intensiv
• Langsam
– Aufwändiger, sequentieller Ablauf
– Starke Drosselung
• Nicht skalierbar
• Debugging fast ausschließlich über manuelles
Nachstellen von Fehlern möglich
• „Flaky“ Tests
Besondere Herausforderungen
• Sehr umfangreiche Produktinstallation
• Tests erzeugen i.d.R. persistente Daten
• Performance kann schwanken: DB, Netzwerk, VM-Host
• Abdeckung unterschiedlicher Szenarien: Dbs, Browser,
Produktversionen, (OS)
• Kaum Programmiererfahrung im QS-Team
Ziele
• Höhere Stabilität
• Geringerer Wartungsaufwand
• Skalierbarkeit
• Zukunftssicherheit (Weiterentwicklung von IDE
ungewiss)
• Simple Bedienung
Lösungsvision
• Eigenes Selenium Framework
• Auf unsere Bedürfnisse zugeschnitten
• TestNG als Grundlage
• Übertragen der üblichen Operationen in simple Befehle
(DSL)
• Browser in Docker-Container kapseln
• Applikation in Docker-Container kapseln
Motivation für TestNG
• Parallele Ausführung von Tests möglich
• Ausführungsreihenfolge von TestCases beeinflussbar
• Leicht in JUnit Umgebung integrierbar
• Open Source und große community
Stabilisierung der Tests
• Abhängigkeit
• TestSteps
• Warten
• Convenience
• Code Qualität (Statische Code Analyse)
Stabilisierung der Tests: Abhängigkeit
• TestCases können voneinander abhängig sein
• Abhängige TestCases werden nur im Erfolgsfall
ausgeführt
→ Keine Folgefehler
→ geringere Fehlermenge
→ leichteres Debugging
Stabilisierung der Tests: Abhängigkeit
Stabilisierung der Tests: TestSteps
• „Atomare“ Operation innerhalb eines TestCase
• Exception-Handling innerhalb der TestSteps
• Fehlschlag führt zu Überspringen der verbleibenden
TestSteps
• Im Report ist zu sehen, welche Schritte nicht
ausgeführt wurden
• Weitere Möglichkeiten:
– Fehlschläge erwarten
– Teile zeitweise deaktivieren
– ...
Stabilisierung der Tests: TestSteps
Stabilisierung der Tests: Warten
• Möglichkeiten zur Abbildung von Zeitverhalten
– Kontinuierliches Warten: waitForElementPresent()
– Statisches Warten: sleep()
• Nur Warten, wenn gewollt und notwendig
• Timeout ist global und lokal konfigurierbar
– Theoretisch sehr große Timeouts möglich
– Aber nur bei weitestgehend stabilen Tests
• Vermeidung von „implicit waits“
Stabilisierung der Tests: Convenience
• Verbinden mehrerer TestSteps in Convenience Methoden
– z.B. waitForElementPresentAndClick()
• Allgemeine Verbesserung der Les- und Wartbarkeit
• Wiederverwendung bewährter Methoden
Stabilisierung der Tests: Code Qualität
• Anforderungen an Code Qualität auch für Test-Code
• Anwendung der (Statischen) Code Analyse auf Selenium
Code
Stabilisierung der Tests
Skalierbarkeit
• App-Container
• Browser-Container
• TestNG „parallel execution“
Skalierbarkeit: App-Container
• Vorbereitete Docker-Container mit Testobjekt (und DB)
• Installation nur einmalig notwendig (statt für jedes
Szenario)
• Einfaches Zurücksetzen der Applikation (Daten)
• Reproduzierbarkeit
– Wird der gleiche Container zum Debugging
verwendet, wird er sich i.d.R. identisch verhalten
Skalierbarkeit: Browser-Container(1)
• https://github.com/elgalu/docker-selenium
• u.a. Basis für Zalenium
• Selenium Server Grid mit 2 Knoten (Firefox & Chrome)
– Bei uns nur Firfox ODER Chrome
• VNC Zugrif
• Mp4 Video Aufzeichnung (des VNC Outputs)
• Benötigt etwa 400 MB Arbeitsspeicher
Skalierbarkeit: Browser-Container(2)
• „Beliebig“ viele Browser, die sich nicht überschneiden
– Ermöglicht Videoaufzeichnung
– Keine Cache-Probleme
– Keine Probleme bei Screenshots
• Jeder Browser hat „sauberen“ Stand
• Klar definierte Browser-Versionen
• Browser Updates an zentraler Stelle und nicht
automatisch
Skalierbarkeit: Browser-Container(3)
Video-Demo
Skalierbarkeit: „parallel execution“
• TestNG ermöglicht parallele Ausführung von TestSuites
• Berücksichtigung bei Entwurf des Selenium Framework
– Verzicht auf static Variablen
– Saubere Trennung von TestSuites
• Große Verringerung der Laufzeit
Skalierbarkeit: „parallel execution“
Skalierbarkeit
Aktueller Stand
2018:
• Weitestgehend stabile Selenium Tests
• Tests in Firefox, Chrome und Chrome-Mobile
• Gesamtdauer reduziert von 5-7 h auf etwa 1,5 h
• Steuerung über Jenkins, auf headless Linux Server
(Debian 9) mit Slaves (Debian 9)
Page Object Model (1)
„Für jede Seite (Page) der Applikation wird eine eigene
Klasse (Objekt) erstellt. Im TestCase werden lediglich
Methoden dieses Objekts aufgerufen.“
• Trennung von eigentlichem Test und Daten
• Interaktion mit (Web-)Seite als Objekt
• Leicht(er) nachvollziehbare Tests
• Änderungen an zentraler Stelle
Page Object Model (2)
tl;dr
• Selenium Funktionalität in Methoden kapseln (DSL)
• Warten an den richtigen Stellen
• Test-Code sollte Qualitätsansprüchen genügen
• Browser-Container für Parallelisierung und Debugging
• Page Object Model
Fragen?

Weitere ähnliche Inhalte

Was ist angesagt?

Microsoft Exchange - Data Protection
Microsoft Exchange - Data ProtectionMicrosoft Exchange - Data Protection
Microsoft Exchange - Data ProtectionGWAVA
 
Exchange Workshop - Veeam
Exchange Workshop - VeeamExchange Workshop - Veeam
Exchange Workshop - VeeamGWAVA
 
Async Job Execution mit Symfony2
Async Job Execution mit Symfony2Async Job Execution mit Symfony2
Async Job Execution mit Symfony2Wolfgang Münder
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich Krause
 
QAMEETUPLEIPZIG: Einführung in Testautomatisierung
QAMEETUPLEIPZIG: Einführung in TestautomatisierungQAMEETUPLEIPZIG: Einführung in Testautomatisierung
QAMEETUPLEIPZIG: Einführung in TestautomatisierungKay Grebenstein
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSBjörn Wilmsmann
 
DevDay 2016: Peter Lehmann - Testautomatisierungsframework Xeta
DevDay 2016: Peter Lehmann - Testautomatisierungsframework XetaDevDay 2016: Peter Lehmann - Testautomatisierungsframework Xeta
DevDay 2016: Peter Lehmann - Testautomatisierungsframework XetaDevDay Dresden
 
Regressionstests in Webprojekten
Regressionstests in WebprojektenRegressionstests in Webprojekten
Regressionstests in WebprojektenSebastian Bauer
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SESebastian Bauer
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling  am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Chris Michael Klinger
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayTobias Schneck
 
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
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Toolsgedoplan
 

Was ist angesagt? (16)

Microsoft Exchange - Data Protection
Microsoft Exchange - Data ProtectionMicrosoft Exchange - Data Protection
Microsoft Exchange - Data Protection
 
Exchange Workshop - Veeam
Exchange Workshop - VeeamExchange Workshop - Veeam
Exchange Workshop - Veeam
 
Async Job Execution mit Symfony2
Async Job Execution mit Symfony2Async Job Execution mit Symfony2
Async Job Execution mit Symfony2
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
QAMEETUPLEIPZIG: Einführung in Testautomatisierung
QAMEETUPLEIPZIG: Einführung in TestautomatisierungQAMEETUPLEIPZIG: Einführung in Testautomatisierung
QAMEETUPLEIPZIG: Einführung in Testautomatisierung
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
 
DevDay 2016: Peter Lehmann - Testautomatisierungsframework Xeta
DevDay 2016: Peter Lehmann - Testautomatisierungsframework XetaDevDay 2016: Peter Lehmann - Testautomatisierungsframework Xeta
DevDay 2016: Peter Lehmann - Testautomatisierungsframework Xeta
 
Regressionstests in Webprojekten
Regressionstests in WebprojektenRegressionstests in Webprojekten
Regressionstests in Webprojekten
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SE
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling  am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony Day
 
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
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 

Ähnlich wie Robustes Testen mit Selenium

Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10inovex GmbH
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnMartin Seibert
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 
Whitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht SpaßWhitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht SpaßClaudia Baur
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
ColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveBokowsky + Laymann GmbH
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenJan Hentschel
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
 
Monitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-AnwendungenMonitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-Anwendungengedoplan
 
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 JavaScriptSebastian Springer
 
GWAVACon 2015: SEP - Backuplösungen auf dem Prüfstand
GWAVACon 2015: SEP - Backuplösungen auf dem PrüfstandGWAVACon 2015: SEP - Backuplösungen auf dem Prüfstand
GWAVACon 2015: SEP - Backuplösungen auf dem PrüfstandGWAVA
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascriptdzuvic
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit RexJan Gehring
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenpingworks
 
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Peter Kirchner
 
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschafteneCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschaftenChristoph Menke
 

Ähnlich wie Robustes Testen mit Selenium (20)

Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickeln
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
Whitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht SpaßWhitepaper QF-Test: GUI Testautomatisierung macht Spaß
Whitepaper QF-Test: GUI Testautomatisierung macht Spaß
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
ColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep Dive
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
Monitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-AnwendungenMonitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-Anwendungen
 
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
 
GWAVACon 2015: SEP - Backuplösungen auf dem Prüfstand
GWAVACon 2015: SEP - Backuplösungen auf dem PrüfstandGWAVACon 2015: SEP - Backuplösungen auf dem Prüfstand
GWAVACon 2015: SEP - Backuplösungen auf dem Prüfstand
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit Rex
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more often
 
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
 
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschafteneCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
 

Mehr von x-celerate

Monitoring und Logging in Kubernetes
Monitoring und Logging in KubernetesMonitoring und Logging in Kubernetes
Monitoring und Logging in Kubernetesx-celerate
 
Automatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-ProzessAutomatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-Prozessx-celerate
 
Serverless Computing: Run code, not servers
Serverless Computing: Run code, not serversServerless Computing: Run code, not servers
Serverless Computing: Run code, not serversx-celerate
 
Releases: Aus Jahren werden Minuten
Releases: Aus Jahren werden MinutenReleases: Aus Jahren werden Minuten
Releases: Aus Jahren werden Minutenx-celerate
 
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profis
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle ProfisClosing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profis
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profisx-celerate
 
Der Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten UmgebungDer Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten Umgebungx-celerate
 
Dienste als Nomaden - Heute in AWS und morgen in Azure
Dienste als Nomaden - Heute in AWS und morgen in AzureDienste als Nomaden - Heute in AWS und morgen in Azure
Dienste als Nomaden - Heute in AWS und morgen in Azurex-celerate
 

Mehr von x-celerate (7)

Monitoring und Logging in Kubernetes
Monitoring und Logging in KubernetesMonitoring und Logging in Kubernetes
Monitoring und Logging in Kubernetes
 
Automatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-ProzessAutomatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-Prozess
 
Serverless Computing: Run code, not servers
Serverless Computing: Run code, not serversServerless Computing: Run code, not servers
Serverless Computing: Run code, not servers
 
Releases: Aus Jahren werden Minuten
Releases: Aus Jahren werden MinutenReleases: Aus Jahren werden Minuten
Releases: Aus Jahren werden Minuten
 
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profis
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle ProfisClosing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profis
Closing Note: Betrieb 24/7 - Entspannt Euch, wir sind doch alle Profis
 
Der Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten UmgebungDer Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten Umgebung
 
Dienste als Nomaden - Heute in AWS und morgen in Azure
Dienste als Nomaden - Heute in AWS und morgen in AzureDienste als Nomaden - Heute in AWS und morgen in Azure
Dienste als Nomaden - Heute in AWS und morgen in Azure
 

Robustes Testen mit Selenium

  • 1. Robustes Testen mitRobustes Testen mit SeleniumSelenium Stabilisierung und Skalierung einer TestlandschaftStabilisierung und Skalierung einer Testlandschaft Urs LangeUrs Lange Teamleader DevOps @ United PlanetTeamleader DevOps @ United Planet
  • 3. Agenda • Ausgangslage und Ziele • Stabilisierung • Skalierung • Aktueller Stand und Ausblick
  • 4. Ausgangslage 2017: • Selenium IDE Tests • Ausführung mit Selenium Standalone Server • Installation der Applikation per ANT Skript • Steuerung über Jenkins, auf Windows Server mit GUI
  • 6. Probleme • Umständlich • Pflege-intensiv • Langsam – Aufwändiger, sequentieller Ablauf – Starke Drosselung • Nicht skalierbar • Debugging fast ausschließlich über manuelles Nachstellen von Fehlern möglich • „Flaky“ Tests
  • 7. Besondere Herausforderungen • Sehr umfangreiche Produktinstallation • Tests erzeugen i.d.R. persistente Daten • Performance kann schwanken: DB, Netzwerk, VM-Host • Abdeckung unterschiedlicher Szenarien: Dbs, Browser, Produktversionen, (OS) • Kaum Programmiererfahrung im QS-Team
  • 8. Ziele • Höhere Stabilität • Geringerer Wartungsaufwand • Skalierbarkeit • Zukunftssicherheit (Weiterentwicklung von IDE ungewiss) • Simple Bedienung
  • 9. Lösungsvision • Eigenes Selenium Framework • Auf unsere Bedürfnisse zugeschnitten • TestNG als Grundlage • Übertragen der üblichen Operationen in simple Befehle (DSL) • Browser in Docker-Container kapseln • Applikation in Docker-Container kapseln
  • 10. Motivation für TestNG • Parallele Ausführung von Tests möglich • Ausführungsreihenfolge von TestCases beeinflussbar • Leicht in JUnit Umgebung integrierbar • Open Source und große community
  • 11. Stabilisierung der Tests • Abhängigkeit • TestSteps • Warten • Convenience • Code Qualität (Statische Code Analyse)
  • 12. Stabilisierung der Tests: Abhängigkeit • TestCases können voneinander abhängig sein • Abhängige TestCases werden nur im Erfolgsfall ausgeführt → Keine Folgefehler → geringere Fehlermenge → leichteres Debugging
  • 13. Stabilisierung der Tests: Abhängigkeit
  • 14. Stabilisierung der Tests: TestSteps • „Atomare“ Operation innerhalb eines TestCase • Exception-Handling innerhalb der TestSteps • Fehlschlag führt zu Überspringen der verbleibenden TestSteps • Im Report ist zu sehen, welche Schritte nicht ausgeführt wurden • Weitere Möglichkeiten: – Fehlschläge erwarten – Teile zeitweise deaktivieren – ...
  • 16. Stabilisierung der Tests: Warten • Möglichkeiten zur Abbildung von Zeitverhalten – Kontinuierliches Warten: waitForElementPresent() – Statisches Warten: sleep() • Nur Warten, wenn gewollt und notwendig • Timeout ist global und lokal konfigurierbar – Theoretisch sehr große Timeouts möglich – Aber nur bei weitestgehend stabilen Tests • Vermeidung von „implicit waits“
  • 17. Stabilisierung der Tests: Convenience • Verbinden mehrerer TestSteps in Convenience Methoden – z.B. waitForElementPresentAndClick() • Allgemeine Verbesserung der Les- und Wartbarkeit • Wiederverwendung bewährter Methoden
  • 18. Stabilisierung der Tests: Code Qualität • Anforderungen an Code Qualität auch für Test-Code • Anwendung der (Statischen) Code Analyse auf Selenium Code
  • 21. Skalierbarkeit: App-Container • Vorbereitete Docker-Container mit Testobjekt (und DB) • Installation nur einmalig notwendig (statt für jedes Szenario) • Einfaches Zurücksetzen der Applikation (Daten) • Reproduzierbarkeit – Wird der gleiche Container zum Debugging verwendet, wird er sich i.d.R. identisch verhalten
  • 22. Skalierbarkeit: Browser-Container(1) • https://github.com/elgalu/docker-selenium • u.a. Basis für Zalenium • Selenium Server Grid mit 2 Knoten (Firefox & Chrome) – Bei uns nur Firfox ODER Chrome • VNC Zugrif • Mp4 Video Aufzeichnung (des VNC Outputs) • Benötigt etwa 400 MB Arbeitsspeicher
  • 23. Skalierbarkeit: Browser-Container(2) • „Beliebig“ viele Browser, die sich nicht überschneiden – Ermöglicht Videoaufzeichnung – Keine Cache-Probleme – Keine Probleme bei Screenshots • Jeder Browser hat „sauberen“ Stand • Klar definierte Browser-Versionen • Browser Updates an zentraler Stelle und nicht automatisch
  • 25. Skalierbarkeit: „parallel execution“ • TestNG ermöglicht parallele Ausführung von TestSuites • Berücksichtigung bei Entwurf des Selenium Framework – Verzicht auf static Variablen – Saubere Trennung von TestSuites • Große Verringerung der Laufzeit
  • 28. Aktueller Stand 2018: • Weitestgehend stabile Selenium Tests • Tests in Firefox, Chrome und Chrome-Mobile • Gesamtdauer reduziert von 5-7 h auf etwa 1,5 h • Steuerung über Jenkins, auf headless Linux Server (Debian 9) mit Slaves (Debian 9)
  • 29. Page Object Model (1) „Für jede Seite (Page) der Applikation wird eine eigene Klasse (Objekt) erstellt. Im TestCase werden lediglich Methoden dieses Objekts aufgerufen.“ • Trennung von eigentlichem Test und Daten • Interaktion mit (Web-)Seite als Objekt • Leicht(er) nachvollziehbare Tests • Änderungen an zentraler Stelle
  • 31. tl;dr • Selenium Funktionalität in Methoden kapseln (DSL) • Warten an den richtigen Stellen • Test-Code sollte Qualitätsansprüchen genügen • Browser-Container für Parallelisierung und Debugging • Page Object Model