JSF Testing - Tools und Technics

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

description

 

Transcript of JSF Testing - Tools und Technics

JSF Testing: Tools und Technics

Andreas Hartmann, Stephan Müller | adesso AG

SpeakerAndreas Hartmann [[email protected]]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 [[email protected]]Senior Software Engineer

Tätigkeitsschwerpunkte:

- Konzeption und Implementierung von Portalen und Webanwendungen

- Serviceorientierte Architekturen und Webtechnologien

JSF Testing: Tools und Technics

Agenda

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JSF Testing: Tools und Technics

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

Agenda

JSF Testing: Tools und Technics

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

Reviews

Richtlinien

Checklisten

Whitebox Test

Statische Tests

Blackbox Test

Programmier Guidelines

Templates

Konstruktive QS Analytische QS

Dynamische Tests

Statische Analyse

JSF Testing: Tools und Technics

Classification

Agenda

JSF Testing: Tools und Technics

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

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/

JSF Testing: Tools und Technics

JSFUnitIn-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

JSF Testing: Tools und Technics

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

JSF Testing: Tools und Technics

JSFUnit"Acrylic Box" TestsBeispiel

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>

JSF Testing: Tools und Technics

JSFUnit"Acrylic Box" TestsBeispiel

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}" ));

}

JSF Testing: Tools und Technics

JSFUnitStatische Analyse (faces-config.xml)• Prüft die Managed Bean Definition

– Sind alle Managed Beans im Scope Session oder Applicationserialisierbar?

– 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 vonAbstractFacesConfigTestCase

JSF Testing: Tools und Technics

JSFUnitStatische Analyse (faces-config.xml)Beispiel

import org.jboss.jsfunit.analysis.AbstractFacesConfigTestCase;

public class StaticAnalysisFacesConfigTest extendsAbstractFacesConfigTestCase {

private static Set<String> paths = new HashSet() {{

add( "WebContent/WEB-INF/faces-config.xml" );

}};

public StaticAnalysisFacesConfigTest() {

super( paths );

}

}

JSF Testing: Tools und Technics

JSFUnitStatische 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

JSF Testing: Tools und Technics

JSFUnitStatische 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" );

}

}

JSF Testing: Tools und Technics

Agenda

JSF Testing: Tools und Technics

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

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/

JSF Testing: Tools und Technics

Apache Shale TestWhitebox 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

JSF Testing: Tools und Technics

Apache Shale TestWhitebox TestBeispiel

@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 );

. . .

JSF Testing: Tools und Technics

Apache Shale TestWhitebox TestBeispiel

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() );

}

JSF Testing: Tools und Technics

Whitebox TestBeispiel

public void testGetUIComponent() {

UIInput inputField = (UIInput) myViewController .getComponent(

INPUT_FIEDL_ID );

assertEquals( inputField.getValue(), INPUT_FIEDL_VALUE );

}

JSF Testing: Tools und Technics

Apache Shale Test

Agenda

JSF Testing: Tools und Technics

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

Ü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

JSF Testing: Tools und Technics

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

JSF Testing: Tools und Technics

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

JSF Testing: Tools und Technics

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

JSF Testing: Tools und Technics

SeleniumBeispiel

@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

JSF Testing: Tools und Technics

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

JSF Testing: Tools und Technics

WebdriverBeispiel

@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() );

}

Selenium/Webdriver

JSF Testing: Tools und Technics

JSF Testing: Tools und Technics

Agenda

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

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

JSF Testing: Tools und Technics

JMeter

JMeter & MAT

JSF Testing: Tools und Technics

JMeter & MAT

JSF Testing: Tools und Technics

JMeter goes JSF• Regular Expression Extractor

• HTTP Request*

Heap Dump

jmap -dump:file=d:/wasteMemory.hprof 4300

JMeter & MAT

JSF Testing: Tools und Technics

Eclipse Memory Analyzer

JMeter & MAT

JSF Testing: Tools und Technics

JSF Testing: Tools und Technics

Agenda

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

JSF Testing: Tools und Technics

Put it Together

QS Tools

Presentation-Layer

JSFUnit Apache Shale

WebDriver Selenium

JMeter & MAT

Business-Layer

Integration-Layer

JUnitEasy

Mock

JSF Testing: Tools und Technics

Agenda

JSFUnitJSFUnit

Apache Shale TestApache Shale Test

ClassificationClassification

Selenium/WebdriverSelenium/Webdriver

Testing StartupTesting Startup

JMeter & Eclipse Memory Analyzer JMeter & Eclipse Memory Analyzer

Put it TogetherPut it Together

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

JSF Testing: Tools und Technics

Testing and more

Wichtiger Erfolgsfaktor:

Unterstützung des Managements sicherstellen

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

Testing Startup

JSF Testing: Tools und Technics

Review

• Fachliche Qualitätssicherung

• Architektur-Review

• Code-Review

QS-Projektsteckbrief

• Inhalte und Termine eines Projekts mit Fokus auf Qualitätssicherung

Vielen Dank für Ihre Aufmerksamkeit.

[email protected] / www.adesso.de