Andreas Hartmann, Stephan Müller adesso AG. JSF Testing: Tools und Technics



Ähnliche Dokumente
Andreas Hartmann, Stephan Müller adesso AG. JSF Testing: Tools and Technics

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Web-Testen mit JUnit und HttpUnit. Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Christian Meder inovex. Sauberes Grün QS für Android

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy

Web-Anwendungen mit JavaServer Faces

JUnit. Software-Tests

Automatisiertes Testen von Webanwendungen mit Selenium und Watij Sebastian Westkamp. Seminar Ausgewählte Themen des Softwareengineering

Enterprise JavaBeans Überblick

Einführung in Google Web Toolkit

Testgetriebenes Ajax. Johannes Link unabhängiger Softwarecoach Marco Klemm andrena objects ag

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Moderne Web-Anwendungen mit Vaadin

Mit dem Google-Web-Toolkit moderne Web-Anwendungen entwickeln

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Enterprise JavaBeans Überblick

Automatisches Exploratives Testen von Webanwendungen

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

JavaServer Faces Ein Arbeitsbuch für die Praxis

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

Kompendium der Web-Programmierung

Coach für agile Softwareentwicklung

Moderne Web- Anwendungen mit

Webtesting. Automatisiertes Testen von Webapplikationen im J2EE Umfeld. Referenten: Martin Riedlberger und David Völkel

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

Berater-Profil Software Engineer Java

Struts 2 Das Imperium schlägt zurück?

Entwicklung von effizienten UI-basierten Akzeptanztests für Webanwendungen

CI was tut sich mit Jenkins in Sachen Test?

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Multimedia im Netz Wintersemester 2012/13

Testest Du schon? Verfahren und Tools zum Testen von Software

Remote Method Invocation

Introduction to JSF technology and Rapid Application Development Roland Zänger

Giftige Akzeptanztests?

Platform as a Service (PaaS) & Containerization

Web-Anwendungen mit Arquillian testen

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

Spring Dynamic Modules for OSGi Service Platforms

Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE. Vorstellung

Model-View-Controller

Testen mit JUnit. Motivation

OpenSource Individualentwicklungsplattform für weborientierte/mobile Anwendungen

Trivadis-Gadgets im Dienste ihrer Qualität: FAAT und PL/SQL Cop

Testen von sicherheitskritischer Embedded Software mit frei verfügbaren Tools. - ein Erfahrungsbericht

GEB UND GRAPHENE IM VERGLEICH. Stefan Hildebrandt

Exposé Ing. Jörg Pöschko

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Entwicklung von qualitativ hochwertigen APEX Anwendungen. Sven Böttcher Consultant, Apps Associates GmbH

VAADIN, SPRING BOOT & REST

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Neue Wege mit Contao 4

J a v a S e r v l e t s

Testen von webbasierten Benutzeroberflächen

Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung

Projektmanagement und Softwareentwicklung. Nina Stodolka, WS2017/2018

Proseminar Wirtschaftsinformatik. Prof. Dr. Hans Knud Arndt Dipl. Wirtsch. Inf. Stefan Breitenfeld Grundstudium WIF, SS 2006

Testen von grafischen Benutzeroberflächen

Weboberflächen testen

Programmierung von Java- Webanwendungen. paluno

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Wie ich lernte die API zu lieben. 19. März sic[!]sec GmbH Industriestraße Gröbenzell

Thema: Testen von objektorientierter Software

v i r t u a l 7 G m b H Consulting- und Softwarepartner Unternehmergeführt 1996 gegründet 85 Mitarbeiter 1 Team aus Spezialisten W E R W I R S I N D

JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Namics. Stefan Bechtold. Principal Software Engineer.

WebComponents. Bausteine des modernen Web

aformatik Training & Consulting GmbH & Co. KG Eine Einführung in das automatisierte Testen mit dem Robot-Framework Thomas Gauss

Die Magie von MBeans und JMX. DOAG 2014 Andreas Chatziantoniou - Foxglove-IT BV

Anforderungsgetriebene Webentwicklung mit Grails:

Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012

Web 2.0 Software-Architekturen

Unternehmensdokumente mit dem XML Publisher erzeugen

12. Ausblick: Test von Web-Applikationen

Groovy und CouchDB. Ein traumhaftes Paar. Thomas Westphal

Einsatz und Grenzen von Java Server Faces 2.0

Am Ziel angekommen? Über Ant und Maven zu SBT und Gradle. Andreas Hartmann Dr. Halil-Cem Gürsoy adesso AG

Testen und Debuggen von Webanwendungen

CARSTEN EMRATH. Abschluss Diplom (FH) Fach Angewandte Informatik. Sun Certified Programmer for the Java 2 Platform, Standard Edition 1.

Die Alternative zum Web-Form Modell

ARQUILLIAN IN DER PRAXIS. Stefan Hildebrandt

Einführung in das Google Web Toolkit am Beispiel eines Projektes aus der Verkehrstelematik

Best of Oracle Weblogic Diagnostic Framework

Qualität von Software - Prof. Schlingloff, Lackner - SS2013 DYNAMISCHER TEST. Whitebox Testen mit JUnit

JAX-RS 2.0 REST mit Java EE 7

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

Agile Apex - Life Cycle Management. Life Cycle Management für Apex Applikationen im agilen Projektumfeld

Recherchebericht. 2 Konzepte Client-Server-Modell Servlets-Architektur Google Web Toolkit... 5

Erstellung eines mockbasierten Testframeworks für Saros. Philipp Cordes Masterarbeit

Beraterprofil - Adem Aslan

Eclipse und EclipseLink

XML Publisher die universelle Lösung für Geschäftsdokumente

Transkript:

Andreas Hartmann, Stephan Müller adesso AG JSF Testing: Tools und Technics

Speaker Andreas Hartmann [hartmann@adesso.de] Principal Software Engineer Tätigkeitsschwerpunkte: - Konzeption und Implementierung von Softwarearchitekturen und Frameworks auf Basis der JEE Plattform - Serviceorientierte Architekturen und Portaltechnologien im Kontext der Versicherungs- und Banken-Branche Stephan Müller [smueller@adesso.de] Senior Software Engineer Tätigkeitsschwerpunkte: - Konzeption und Implementierung von Portalen und Webanwendungen - Serviceorientierte Architekturen und Webtechnologien

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Classification Konstruktive QS Analytische QS Programmier Guidelines Whitebox Test Templates Reviews Dynamische Tests Checklisten Statische Tests Blackbox Test Richtlinien Statische Analyse

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

JSFUnit Überblick Entwickelt von JBoss Inc. und der JBoss Community Testerstellung mit JUnit In-Container Testing Statische Analyse Features JSFUnit Console JSF2.0 / Servlet 3.0 Unterstützung RichFaces (AJAX) Unterstüzung URL: http://www.jboss.org/jsfunit/

JSFUnit In-Container Testing Testausführung mit Cactus und HtmlUnit Tests werden mit Anwendung im Container deployed Ausführung durch Aufruf von Testseite oder JSFUnit Console Testmöglichkeiten Wert- und Zustandsänderungen in der Managed Beans Navigationsregeln Komponenten im UIViewTree Validierung FacesMessages

JSFUnit "Acrylic Box" Tests Kombiniert Whitebox und Blackbox Tests Führt JUnit Tests im WebContainer aus Erzeugt realen HTTP Request auf JSF Seite Prüft Änderungen im Server über JSF API Funktionen Keine Mock-Objekte

JSFUnit "Acrylic Box" Tests Beispiel index.jsp <f:view> <h:form id="form1"> <h:outputtext id="question" value="bitte Namen eingeben:" /> <h:inputtext id="input" value="#{mbean.text}" /> <h:commandbutton id="submit" value="absenden" action="/hello.jsp" /> </h:form> </f:view> hello.jsp <f:view> <h:outputtext id="output" value="hallo, #{mbean.text}" /> </f:view>

JSFUnit "Acrylic Box" Tests Beispiel public void testhalloandreas() throws IOException { JSFSession jsfsession = new JSFSession( "/index.jsf" ); JSFClientSession client = jsfsession.getjsfclientsession(); JSFServerSession server = jsfsession.getjsfserversession(); assertequals( "/index.jsp", server.getcurrentviewid() ); client.setvalue( "input", "Andreas" ); client.click( "submit" ); } assertequals( "/hello.jsp", server.getcurrentviewid() ); assertequals( "Andreas", server.getmanagedbeanvalue( "#{mbean.text}" ));

JSFUnit Statische Analyse (faces-config.xml) Prüft die Managed Bean Definition Sind alle Managed Beans im Scope Session oder Application serialisierbar? Besitzt die Managed Bean für jede managed-property eine Setter- Methode? Existieren doppelte Managed Bean Namen? Ist der angegebene Scope gültig? Existiert die angegebene Klasse? Leitet die angegebene Klasse von der richtigen Klasse ab? Testklasse erbt von AbstractFacesConfigTestCase

JSFUnit Statische Analyse (faces-config.xml) Beispiel import org.jboss.jsfunit.analysis.abstractfacesconfigtestcase; public class StaticAnalysisFacesConfigTest extends AbstractFacesConfigTestCase { private static Set<String> paths = new HashSet() {{ }}; add( "WebContent/WEB-INF/faces-config.xml" ); } public StaticAnalysisFacesConfigTest() { } super( paths );

JSFUnit Statische Analyse (Views) Prüft Value & Method Expressions Wird eine nicht-existente Managed Beans referenziert? Wird eine nicht-existente Action referenziert? Wird ein nicht-existenter ActionListener referenziert? Testklasse erbt von AbstractViewTestCase

JSFUnit Statische Analyse (Views) Beispiel import org.jboss.jsfunit.analysis.abstractviewtestcase; public class StaticAnalysisViewTest extends AbstractViewTestCase { private static Set<String> absoluteviewpaths = new HashSet() {{ add( "WebContent/index.jsp" ); }}; private static Set<String> recursiveviewpaths = new HashSet() {{ }}; add( "WebContent/views" ); public StaticAnalysisViewTest() { super( absoluteviewpaths, recursiveviewpaths, "WebContent/WEB-INF/faces-config.xml" ); } }

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Apache Shale Test Überblick Sub-Projekt des Apache Shale Projekts Entwickelt von der Apache Community Seit Mai 2009 auf Apache Attic ("Projekt-Friedhof") Stellt Mock-Objekte für den Servlet Container und JSF bereit Testerstellung mit JUnit URL: http://shale.apache.org/shale-test/

Apache Shale Test Whitebox Test Zentrale JSF Framework Klassen werden durch Mock-Objekte simuliert Application ExternalContext FacesContext Lifecycle Verhalten einer UI Komponente kann über Unit-Tests verifiziert werden Konvertierung Validierung Datenübernahme in Modell Testklasse erbt von AbstractJsfTestCase

Apache Shale Test Whitebox Test Beispiel @Override public void setup() throws Exception { super.setup(); // JSF initialisieren UIViewRoot viewroot = new UIViewRoot(); viewroot.setviewid( VIEW_ID ); facescontext.setviewroot( viewroot ); List<UIComponent> children = viewroot.getchildren(); UIInput inputfield = new UIInput(); inputfield.setid( INPUT_FIEDL_ID ); inputfield.setvalue( INPUT_FIEDL_VALUE ); children.add( inputfield );...

Apache Shale Test Whitebox Test Beispiel public void testaddglobalnotification() { } assertfalse( facescontext.getmessages().hasnext() ); Notification notification = NotificationFactory.newGlobalNotification( Mvc4JsfDisplayMessage.SYSTEM_FEHLER, Notification.Severity.SEVERITY_ERROR ); myviewcontroller.addnotification( notification ); asserttrue( facescontext.getmessages().hasnext() );

Apache Shale Test Whitebox Test Beispiel public void testgetuicomponent() { } UIInput inputfield = (UIInput)myViewController.getComponent( INPUT_FIEDL_ID ); assertequals( inputfield.getvalue(), INPUT_FIEDL_VALUE );

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Selenium/Webdriver Überblick Testframeworks für Web-Anwendungen Erleichtern die Erstellung automatisierter Tests Unterstützen gängige Browser Hilfreich für Kompatibilitätstest Tests werden in einem Fenster des gewünschten Browser ausgeführt Testerstellung mit JUnit URL: http://seleniumhq.org/

Selenium/Webdriver Selenium Führt Tests als JavaScript Anwendung im Browser aus Viele unterstützte Browser Firefox, IExplorer, Safari, Opera, Google Chrome, etc. Browserunabhängige Tests Ausführung in unterschiedlichen Browsern ohne Anpassung

Selenium/Webdriver Selenium-IDE Firefox-Plugin Capture-and-Replay Funktionalität Interaktives Testen im Browser Aufzeichnen und Ausführen von Tests Exportieren von Tests als HTML, Java, C#, PHP, Perl, Python und Ruby Code

Selenium/Webdriver Selenium-RC / Selenium-Grid Testautomatisierung mit Selenium-RC Testentwicklung in Java, C#, PHP, Perl, Python und Ruby Unterstützte Browser: Firefox, IExplorer, Safari, Opera, Google Chrome, etc. Parallele Tests mit Selenium-Grid Steuert mehrere Instanzen von Selenium-RC Zeitersparnis durch Parallelisierung Einsatz für Lasttests Amazon EC2 Unterstützung

Selenium/Webdriver Selenium Beispiel @Test public void fillinputfieldandsubmit() { selenium.open( "/de/" ); assertequals( "adesso AG - Herzlich willkommen!", selenium.gettitle() ); // Eingabefeld auslesen, Suchbegriff eingeben & Anfrage absenden assertequals( "Suchen", selenium.getvalue( "textfield" ) ); selenium.type( "textfield", "Jobs" ); selenium.click( "suchicon" ); selenium.waitforpagetoload( "30000" ); assertequals( "adesso AG - Ergebnisse Ihrer Suchanfrage, selenium.gettitle() ); }

Selenium/Webdriver Webdriver Verfolgt gleichen Ansatz wie Selenium Aber: Steuert Browser über einen Treiber fern Native Treiber für IExplorer, Firefox, Chrome Integration in Selenium 2.0 Stärken Behandlung von multiplen Frames, Browserfenstern, Popups und Alerts Seiten-Nagivation AJAX UI Elemente

Selenium/Webdriver Webdriver Beispiel @Test public void fillinputfieldandsubmit() { driver.get( "http://www.adesso.de" ); assertequals( "adesso AG - Herzlich willkommen!", driver.gettitle() ); // Eingabefeld finden, leeren, Suchbegriff eingeben & Anfrage absenden WebElement search = driver.findelement( By.id( "textfield" ) ); assertequals( "Suchen", search.getvalue() ); search.clear(); search.sendkeys( "Jobs" ); search.submit(); // Titel der Seite prüfen assertequals( "adesso AG - Ergebnisse ihrer Suchanfrage", driver.gettitle() ); }

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

JMeter & MAT JMeter Werkzeug zur Durchführung von Lasttests Http FTP JDBC SOAP/XML-RCP JUnit Erstellung von Testplänen Performancemessung URL: http://jakarta.apache.org/jmeter/

JMeter & MAT JMeter

JMeter & MAT JMeter goes JSF Regular Expression Extractor HTTP Request*

JMeter & MAT Heap Dump jmap -dump:file=d:/wastememory.hprof 4300

JMeter & MAT Eclipse Memory Analyzer

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Put it Together QS Tools JUnit Easy Mock JSFUnit Apache WebDriver JMeter & Shale Selenium MAT Presentation-Layer Business-Layer Integration-Layer

Agenda Classification JSFUnit Apache Shale Test Selenium/Webdriver JMeter & Eclipse Memory Analyzer Put it Together Testing Startup

Testing Startup Auswahl der für das Projekte angemessenen Testwerkzeuge Testanforderungen bei der Architektur mit berücksichtigen Festlegung was wie getestet werden soll Integration der Tests in den Buildprozess Regressionsfähigkeit der Tests Testdaten

Testing Startup Testing and more QM Plan Organisation, Mittel, Planung, Reporting und Werkzeuge der Qualitätssicherung Abnahme von Quality-Gates Abnahmeprotokoll für Meilensteine, an denen eine Qualitätskontrolle im Projekt erfolgt Wichtiger Erfolgsfaktor: Unterstützung des Managements sicherstellen QS-Projektsteckbrief Inhalte und Termine eines Projekts mit Fokus auf Qualitätssicherung Review Fachliche Qualitätssicherung Architektur-Review Code-Review

Vielen Dank für Ihre Aufmerksamkeit. info@adesso.de / www.adesso.de