Upload
adesso-ag
View
3.167
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
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 & MAT
JSF Testing: Tools und Technics
JMeter goes JSF• Regular Expression Extractor
• HTTP Request*
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