2. 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
JSF Testing: Tools und Technics
3. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
4. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
5. Classification
Konstruktive QS Analytische QS
Programmier Whitebox Test
Guidelines
Dynamische
Tests
Templates Reviews
Checklisten Statische Blackbox Test
Tests
Richtlinien Statische Analyse
JSF Testing: Tools und Technics
6. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
7. 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
8. 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
JSF Testing: Tools und Technics
9. 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
12. 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
JSF Testing: Tools und Technics
13. 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 );
}
}
JSF Testing: Tools und Technics
14. 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
JSF Testing: Tools und Technics
15. 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" );
}
}
JSF Testing: Tools und Technics
16. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
17. 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
18. 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
JSF Testing: Tools und Technics
19. 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 );
. . .
JSF Testing: Tools und Technics
20. 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() );
}
JSF Testing: Tools und Technics
21. Apache Shale Test
Whitebox Test
Beispiel
public void testGetUIComponent() {
UIInput inputField = (UIInput)myViewController.getComponent(
INPUT_FIEDL_ID );
assertEquals( inputField.getValue(), INPUT_FIEDL_VALUE );
}
JSF Testing: Tools und Technics
22. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
23. 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/
JSF Testing: Tools und Technics
24. 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
JSF Testing: Tools und Technics
26. 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
JSF Testing: Tools und Technics
27. 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()
);
}
JSF Testing: Tools und Technics
28. 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
JSF Testing: Tools und Technics
29. 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()
);
}
JSF Testing: Tools und Technics
30. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
31. 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/
JSF Testing: Tools und Technics
36. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
37. Put it Together
Easy Apache WebDriver JMeter &
QS Tools JUnit JSFUnit
Shale Selenium MAT
Mock
Presentation-Layer
Business-Layer
Integration-Layer
JSF Testing: Tools und Technics
38. Agenda
Classification
JSFUnit
Apache Shale Test
Selenium/Webdriver
JMeter & Eclipse Memory Analyzer
Put it Together
Testing Startup
JSF Testing: Tools und Technics
39. 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
40. Testing Startup
Testing and more
QM Plan Abnahme von Quality-Gates
• Organisation, Mittel, Planung, • Abnahmeprotokoll für Meilensteine,
Reporting und Werkzeuge der an denen eine Qualitätskontrolle im
Qualitätssicherung Projekt erfolgt
Wichtiger Erfolgsfaktor:
Unterstützung des Managements sicherstellen
QS-Projektsteckbrief Review
• Inhalte und Termine eines • Fachliche Qualitätssicherung
Projekts mit Fokus auf
Qualitätssicherung • Architektur-Review
• Code-Review
JSF Testing: Tools und Technics
41. Vielen Dank für Ihre Aufmerksamkeit.
info@adesso.de / www.adesso.de