Automatisierte GUI-Tests mit Selenium

download Automatisierte GUI-Tests mit Selenium

of 37

  • date post

    26-Jun-2015
  • Category

    Technology

  • view

    340
  • download

    1

Embed Size (px)

Transcript of Automatisierte GUI-Tests mit Selenium

  • 1. Benjamin Schmid | eXXcellent solutions gmbhAutomatisierte 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 AusblickBenjamin Schmid | eXXcellent solutions gmbh 3. VisionSoftwarenderungNeueTeAutom. TestzyklusstsTest-FeedbackTestBenjamin Schmid | eXXcellent solutions gmbh 4. Die Technologien SeleniumBenjamin Schmid | eXXcellent solutions gmbh 5. Was ist Selenium ein Testwerkzeug fr Web-Applikationen steuert einen Browser direkt, wie ein normaler Benutzer ist Freie Software / Open Source luft auf: IE Firefox Konqueror Seamonkey SafariCaminoOperaBestandteile von Selenium Core Steuerungs-Engine fr den Browser (JavaScript) IDE Scripting-Entwicklungswerkzeug (FireFox) RC Remote Control (API fr Java, C#, Python, ) weitere Selenium Grid, Benjamin Schmid | eXXcellent solutions gmbh 6. Wie funktionierts? 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 funktionierts? Selenium Locators Wie knnen 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 mchtig Extension Selenium UI Elements: ui=issuePages::article(index=2) Benjamin Schmid | eXXcellent solutions gmbh 8. Wie funktionierts? Selenium RC RC Server konfiguriert, startet & stoppt den gew. Browser Injiziert via Proxy die Selenium-Core-Engine Dient als Vermittler fr die Anfragen und Befehle der RC-ClientsQuelle: 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, Prfungen einfgen und einbinden Tests starten (RC Server, Zielapplikation und Test)Benjamin Schmid | eXXcellent solutions gmbh 10. Wie funktionierts? IDE/Java-RC Skript Beispiel: Mit Selenium IDE generiertes Java RC-SkriptHTML name/id Selektor ..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) Lsung: Subprojekt Web Driver (Native Engine) Cross-Browser Funktionalitt nicht ganz gratis Bedingte Eignung fr Last-Tests Sehr positiv: Kontinuierlich steigende Aufmerksamkeit & Projektaktivitt! (Heavy User: Google) Benjamin Schmid | eXXcellent solutions gmbh 12. Selenium - Fazit (1/2) Browserfernsteuerungechter Blackbox Testgut gewappnet fr Web 2.0, Ajax, Webframeworks: dynamische Inhalte, IDs, Layouts Client-Logiken (Ajax, JS-Frameworks) Proprietre HTTP-KommunikationJava-BridgeSelektoren (XPath) End-to-End End-to-EndGewohnte Sprachmittel/UmgebungIdeal fr Funktions-/Abnahme-Tests (auch Cross-Browser-Tests) Benjamin Schmid | eXXcellent solutions gmbh 13. Selenium - Fazit (2/2) Record & Playback mit Selenium IDE Komfortabler Start fr einfache/kleine Web 1.0-Applikationen/Tests IDE Standardvorgehen: Schnell & Einfach Keine Out-of-the Box Lsung fr - dynamische IDs (Echo2, wingS, ) und - langfristig stabile Tests (wechselnde HTML Layouts)Its free software! Ideales Konzept/Technologie Potential was Verwendung anbelangt Benjamin Schmid | eXXcellent solutions gmbh 14. Die Technologien TestNGBenjamin Schmid | eXXcellent solutions gmbh 15. Warum kein JUnit? Erstes, populres Testframework (1998, Gamma & Beck) Quasi de facto Standard Funktionalitt rein auf Unit-Tests ausgelegt Opfer des eigenen Erfolgs: Regelmiger Einsatz auerhalb echter Unit-Tests Lange Zeit kaum Updates (3.x) Offene Wnsche fr funktionale Tests Benjamin Schmid | eXXcellent solutions gmbh 16. Was ist TestNG? Ein Testing-Frameworkfr alle Testebenen, d.h. Unit-Tests Funktionale Tests Integrations-Tests etc. Test-Gliederung in:Suite -> Test -> Class -> Method + parallel: Groups JUnit3-Kompatibilitts-Modus Plugins fr Eclipse und IntelliJ Benjamin Schmid | eXXcellent solutions gmbh 17. TestNG Strukturierung von Tests Gruppierung mit groups Ein- und Ausschlieen von Tests & Konfigurationen Mehrfache Gruppenzugehrigkeiten Auswahl durch regulre Ausdrcke: gui.* -> gui.basics, gui.longrunner, Abhngigkeiten/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: Testausfhrung 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 Parallelitt und Multithreading @Test(invocationCount=1000, threadPoolSize=10) Erfolgsquoten @Test(invocationCount=100, successPercentage=95) Maximale Ausfhrungszeiten / 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 BeispielBenjamin Schmid | eXXcellent solutions gmbh 21. TestNG - Fazit TestNG deckt deutlich mehr als nur Unit-Tests ab Fr 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 + DependenciesFactoryFr unsere Anforderungen gegenber JUnit deutlich berlegen Benjamin Schmid | eXXcellent solutions gmbh 22. Die Herausforderungen der PraxisBenjamin Schmid | eXXcellent solutions gmbh 23. Challenge #1: Effiziente GUI-Test Erstellung Aufgezeichnete bzw. manuell codierte Selektoren problematisch: XPath & HTML-Wissen zum Verstndnis erforderlich Ohne stabile & sprechende HTML IDs sehr komplex Nicht selbsterklrend; Blick in HTML-Seite notwendig Anfllig gegenber nderung am Layout/HTML-CodeWunsch: Einfache und selbsterklrende API fr Jedermann Einmal geschriebene Test sollen robust gegenber internen nderungen sein Benjamin Schmid | eXXcellent solutions gmbh 24. Lsung #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-Ausdrcke 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 Login Login Selenium RC type(table[@class,password) type(table[@class,password) Benjamin Schmid | eXXcellent solutions gmbh 25. DSL Ein BeispielBenjamin Schmid | eXXcellent solutions gmbh 26. Herausforderung #2: Die Nachvollziehbarkeit Unbeaufsichtigte Ausfhrung automatischer GUI-Tests Vielschichtige Testabdeckung Viele Fehlerpotentiale regelmige Fehleranalyse notwendig Wunsch nach Transparenz: Einfaches nachvollziehen & verstehen von: was passiert? und in welchem Kontext? was schlgt fehl? Benjamin Schmid | eXXcellent solutions gmbh 27. Lsung #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 grne Wiese Tests in datenlosen Systemen wenig gewinnbringend Sinnvolle Quellen von Testdaten: knstlich erzeugte Datenszenarien: Aufwndig zu konstruieren; definierte Konstellation produktionsnahe Echt-Daten: realittsnahe Mengengerste; Stichproben geiignet Es gilt bei Bedarf die umfangreiche Datenszenarios schnell wieder herstellen zu knnen, welche die Grundlage fr den jeweiligen Test bildeten Benjamin Schmid | eXXcellent solutions gmbh 29. Lsung #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 SchemaLiquBase Benjamin Schmid | eXXcellent solutions gmbh 30. Herausforderung #4: Pluggin all together Server sicher stoppen SoftwarenderungTest-FeedbackDatensituation + MigrationNeueTestauswertungstsAutom. TestzyklusApplikation deployenTeLog-/ReportArchivierungAblauf protokollieren TestServer starten (Appl, RC) Start abwarten Benjamin Schmid | eXXcellent solutions gmbh 31. Live DemoBenjamin Schmid | eXXcellent solutions gmbh 32. Fazit und AusblickBenjamin 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) Seleni