(c) 2002 by peter roßbach pr@webapp.de – jax 2002pr@webapp.de test infected: web testing mit...

Post on 05-Apr-2015

111 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Test infected:Test infected:

Web Testing mit HttpUnit und Web Testing mit HttpUnit und Cactus FrameworkCactus Framework

Peter Roßbach Peter Roßbach

(pr@webapp.de)(pr@webapp.de)

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

AgendaAgenda

Web Komponenten TestWeb Komponenten Test JUnitJUnit HTTPUnitHTTPUnit ServletUnitServletUnit CactusCactus

Build VerificationBuild Verification cruisecontrolcruisecontrol

AnmerkungenAnmerkungen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

MotivationMotivation

XP-Techniken für das TestenXP-Techniken für das Testen Kostengünstige Lösung für das Kostengünstige Lösung für das

Testen von Web-AnwendungenTesten von Web-Anwendungen Automatisierung der ErzeugungAutomatisierung der Erzeugung Automatisierte TestsAutomatisierte Tests Protokollierung und Protokollierung und

Benachrichtigung der Tests Benachrichtigung der Tests Teamentwicklung fördernTeamentwicklung fördern

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Testing GameTesting Game

Simple Design

Continuous Integration

Coding Standards

Short Releases

Planning Game

Refactoring

Programming

Testing

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

ZieleZiele

Unit Test während der EntwicklungUnit Test während der Entwicklung Funktionale Test für Web-Funktionale Test für Web-

AnwendungenAnwendungen Automatisierung der ErzeugnisseAutomatisierung der Erzeugnisse VersionisierungVersionisierung ProtokollierungProtokollierung LasttestLasttest

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Effektiv TestenEffektiv Testen

möglichst zeitnah zur Programmierung automatisiert und damit wiederholbar muss Spaß machen Testen so oft wie Kompilieren so einfach wie Kompilieren Fehler finden, nicht Fehlerfreiheit

beweisen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

TestArtenTestArten Unit Tests White-Box Tests isolierter

Einheiten Akzeptanztests Black-Box Tests funktionaler

Anforderungen weitere Systemtests

Lasttests Performanztests Usability-Tests ...

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JunitJunit

Java-Framework zum Schreiben und Ausführen automatischer Unit Tests

Tests werden in Java codiert. Entsprechende Frameworks sind

für andere Programmiersprachen erhältlich.

AutorenAutoren Kent Beck and Erich GammaKent Beck and Erich Gamma

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT TestprozessJUNIT Testprozess

Rumpf anlegen

Klasse Testcase

Testcase schreiben

Anforderung klären

Kompilieren

Funktionalität implementieren

Testcase erfolgreich

Testcase scheitert

Anforderung verfeinern

Refactoring

Testcase ausführen

Nächste Anforderung

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT PizzaBinderTestJUNIT PizzaBinderTestpackage de.objektpark.jspTutorial.model;package de.objektpark.jspTutorial.model;

import junit.framework.*;import junit.framework.*;

public class PizzaBinderTest extends TestCase {public class PizzaBinderTest extends TestCase {

public PizzaBinderTest (String testName) public PizzaBinderTest (String testName)

{ super(testName); }{ super(testName); }

public static Test suite() {public static Test suite() {

return new TestSuite(PizzaBinderTest.class);return new TestSuite(PizzaBinderTest.class);

}}

protected void setUp() throws Exception { ... }protected void setUp() throws Exception { ... }

protected void tearDown() throws Exception { ... }protected void tearDown() throws Exception { ... }

public void testBind() throws Exception {public void testBind() throws Exception {

List objects = null;List objects = null;

objects = retriever("pizza");objects = retriever("pizza");

assert(" no pizza bind",assert(" no pizza bind",

objects.get(0) instanceof Pizza);objects.get(0) instanceof Pizza);

}}

}}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT SwingUiJUNIT SwingUi

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT TesttippsJUNIT Testtipps Jeder Aspekt der Klasse sollte Jeder Aspekt der Klasse sollte

einem Test unterzogen werden:einem Test unterzogen werden: Randparameter TestRandparameter Test Unzulässige WerteUnzulässige Werte SchleifeninvariantenSchleifeninvarianten

Sie können nur die Sie können nur die Funktionsergebnisse testen:Funktionsergebnisse testen: ReturnwerteReturnwerte Zustand der ObjekteZustand der Objekte

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT TesttippsJUNIT Testtipps Schreiben Sie kleine Methoden Schreiben Sie kleine Methoden

in Ihren Klassen und in den in Ihren Klassen und in den TestCases.TestCases.

Schreiben Sie die Test i.d. Regel Schreiben Sie die Test i.d. Regel vor Implementierung oder vor Implementierung oder nahezu zeitgleich.nahezu zeitgleich.

Keine gleichzeitige Keine gleichzeitige Verbesserung des Codes und Verbesserung des Codes und Korrektur von Fehlern.Korrektur von Fehlern.

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT TesttippsJUNIT Testtipps

Trennung vonTrennung von Bug FixingBug Fixing RefactoringRefactoring Re-DesignRe-Design Neue FunktionalitätenNeue Funktionalitäten

TestvorgehenTestvorgehen Bottom UpBottom Up Top DownTop Down

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JUNIT Web-TestumgebungJUNIT Web-Testumgebung

JUNIT 3.7JUNIT 3.7 Jakarta Ant 1.4.1Jakarta Ant 1.4.1 Intellij IDEA 2.5Intellij IDEA 2.5 Jakarta Tomcat 4.0.4 od 4.1.0Jakarta Tomcat 4.0.4 od 4.1.0 James 2.0.2James 2.0.2 HttpUnitHttpUnit CactusCactus CruiseControlCruiseControl

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Agenda TestingAgenda Testing

J2EEJ2EE TestanforderungTestanforderung HttpUnitHttpUnit SerlvetUnitSerlvetUnit CactusCactus

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

J2EE UmgebungJ2EE UmgebungClient Applikations Logik EIS

(X)HTML /XML

JavaApplet

(Java)Application

J2EE Application Server

Web Container

EJB Container

Java APIs

Java APIs

Session Beans

Entity Beans

TagLibsServlets JSPs

RDMS

Java App

Mail Server

Corba

JDBC

JavaMail

RMI

IIOP

JNDI

JMS

DS

Message Queue

MessageDriven Beans

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

J2EE Test AnforderungJ2EE Test Anforderung Trennung von Kommunikation Trennung von Kommunikation

und Funktionalitätund Funktionalität Testbarkeit der Komponenten im Testbarkeit der Komponenten im

Entwurf berücksichtigenEntwurf berücksichtigen Verwendung des erprobten Verwendung des erprobten

JUNIT-FrameworkJUNIT-Framework Test von Java Klassen ohne Test von Java Klassen ohne

Server DeploymentServer Deployment Test von Servlet/JSP oder EJB, Test von Servlet/JSP oder EJB,

die auf dem Server ablaufendie auf dem Server ablaufen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

J2EE Test VorgehenJ2EE Test Vorgehen

Funktionaler Unit TestFunktionaler Unit Test HttpUnitHttpUnit

Code + Logik Unit TestCode + Logik Unit Test Mock ObjekteMock Objekte ServletUnitServletUnit

Integration Unit TestIntegration Unit Test CactusCactus

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnitHTTPUnit

HTTPUnit basiert auf JUNITHTTPUnit basiert auf JUNIT HTTPUnit nutzt JTidy zum HTML HTTPUnit nutzt JTidy zum HTML

Parsing und Xerces für XMLParsing und Xerces für XML Remote Test für HTTP ServerRemote Test für HTTP Server OpenSource LizenzOpenSource Lizenz Autor ist Russel GoldAutor ist Russel Gold Aktuelle Version ist 1.3Aktuelle Version ist 1.3 Unterstützung Servlet API >=2.0Unterstützung Servlet API >=2.0

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit EigenschaftenHTTPUnit Eigenschaften

Cookie SupportCookie Support HTTP AuthentificationHTTP Authentification SSL SupportSSL Support ResponseResponse

HTML als ObjekteHTML als Objekte XML als DOMXML als DOM

Test für alle KlassenTest für alle Klassen Eigener Pseudo Web ServerEigener Pseudo Web Server Servlet EmulationServlet Emulation

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit ArchitekturHTTPUnit Architektur

Testclient Web ServerServlet Container

Junit TestRunner

HttpUnit TestCase

ServletJSP

Cgi-bin

Ressourcen

HttpUnit Web-

Conversation

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit KlassenHTTPUnit KlassenWebConversationWebConversation Web-Browser Emulation, Cookie Web-Browser Emulation, Cookie

Management, Relative Url, Management, Relative Url, Request/Response Ausführen / HTTP u. Request/Response Ausführen / HTTP u. HTTPSHTTPS

GetMethodWebRequestGetMethodWebRequest HTTP GET RequestHTTP GET Request

PostMethodWebRequestPostMethodWebRequest HTTP POST RequestHTTP POST Request

WebResponseWebResponse Ergebnis eines RequestsErgebnis eines Requests

WebLinkWebLink HTML Link im WebResponseHTML Link im WebResponse

WebFormWebForm HTML Form im WebResponseHTML Form im WebResponse

SubmitButtonSubmitButton FROM Submit ButtonsFROM Submit Buttons

WebTableWebTable HTML Table im WebResponseHTML Table im WebResponse

TableCellTableCell HTML Table CellHTML Table Cell

WebFrameWebFrame HTML Frameset im WebResponseHTML Frameset im WebResponse

HttpUnitOptionsHttpUnitOptions Globale OptionsGlobale Options

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit Login SeiteHTTPUnit Login Seite

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit JSP_indexTestHTTPUnit JSP_indexTest public class JSP_indexTest extends Testcase {

...

public void testLogin() throws Exception {

WebConversation wc = new WebConversation();

WebResponse resp = wc.getResponse(getHostPath());

WebLink link = resp.getLinkWith("Anmelden");

resp = wc.getResponse(link.getRequest());

assertIncludeForm(resp, 1);

WebForm form = resp.getForms()[0] ;

assertLoginForm(form);

assertLoginCustomer(wc, form.getRequest(),"3");

}

...

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit JSP_indexTestHTTPUnit JSP_indexTestprivate void assertIncludeForm(

WebResponse aResponse,

int expectedforms) throws Exception

{

WebForm[] forms = aResponse.getForms();

if (expectedforms > 0) {

assertNotNull("login with no fields", forms);

int length = forms.length;

assert("Expected " + expectedforms,

expectedforms == length);

} else {

assert("No forms expected", null != forms);

}

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit JSP_indexTestHTTPUnit JSP_indexTestprivate void assertLoginForm(WebForm form) throws Exception {

String[] parameterNames = form.getParameterNames();

int length = parameterNames.length;

assert("Number of parameters wrong -- was <" + length

+ "> expected <10>", 9 == length);

assertEquals("First parameter doAction",

"doAction", parameterNames[0]);

assertEquals("First parameter id",

"id", parameterNames[1]);

assertEquals("First parameter firstname",

"firstname", parameterNames[2]);

assertEquals("First parameter lastname",

"lastname", parameterNames[3]);

...

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit JSP_indexTestHTTPUnit JSP_indexTest

private void assertLoginCustomer(

WebConversation wc,

WebRequest req,

String id) throws Exception

{

req.setParameter("id", id);

WebResponse resp = wc.getResponse(req);

assertIncludeForm(resp, 1);

assertNotNull(

(resp.getForms()[0]).getSubmitButton("next"));

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

IDEA IntegrationIDEA IntegrationJunit

AntEditor

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit DemoHTTPUnit Demo

Start JBuilder oder IDEAStart JBuilder oder IDEA Start Tomcat mit jspTutorialStart Tomcat mit jspTutorial Start Junit TestcaseStart Junit Testcase Bewertung des ErgebnissesBewertung des Ergebnisses Inside CodeInside Code Änderung der TestcasesÄnderung der Testcases

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

HTTPUnit AnmerkungenHTTPUnit Anmerkungen Blackbox TestBlackbox Test Seitenablaufplan als Basis der Seitenablaufplan als Basis der

TestfalldefinitionTestfalldefinition Kontrolle des DesignKontrolle des Design Kontrolle der LinksKontrolle der Links Kontrolle zwischen Entwickler Kontrolle zwischen Entwickler

und Designerund Designer XML und HTML Ausgabe testbarXML und HTML Ausgabe testbar Unabhängigkeit von Server Unabhängigkeit von Server

Technologie (ASP,JSP,PHP)Technologie (ASP,JSP,PHP)

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus 1.2Cactus 1.2

Neues Jakarta Projekt aus der Neues Jakarta Projekt aus der J2EEUnit entstandenJ2EEUnit entstanden

Container Side TestingContainer Side Testing Testcases haben Client und Testcases haben Client und

Remote BestandteilRemote Bestandteil Deployment der Testcases auf Deployment der Testcases auf

dem Serverdem Server Autor ist Vincent MassolAutor ist Vincent Massol

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus EigenschaftenCactus Eigenschaften Test Prüfung auf dem Client und Test Prüfung auf dem Client und

dem Serverdem Server Testen von Situationen, die nur Testen von Situationen, die nur

auf dem Server existieren auf dem Server existieren Support von Servlet API 2.2 und Support von Servlet API 2.2 und 2.32.3

Getestet mit Tomcat 3.2.x, 3.3 Getestet mit Tomcat 3.2.x, 3.3 4.x; Resin 1.2,1.3 ; Weblogic 5.1, 4.x; Resin 1.2,1.3 ; Weblogic 5.1, 6.x6.x

Umfangreiche Testcases und Umfangreiche Testcases und gute Dokumentationgute Dokumentation

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus ArchitekturCactus Architektur

Testclient Web ServerServlet Container

Junit TestRunner

Server seitige

Testklassen

Cactus TestCase

Cactus Redirector

Proxy

Cactus TestCase

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus ServletTestCaseCactus ServletTestCase

AttributeAttribute KlasseKlasseconfigconfig javax.servlet.ServletConfigjavax.servlet.ServletConfig

sessionsession javax.servlet.http.HttpSessionjavax.servlet.http.HttpSession

responseresponse javax.servlet.http.HttpServletResponsejavax.servlet.http.HttpServletResponse

requestrequest javax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletRequest

Implizite Attribute der ServletTestCase Klasse

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus Servlet Example ICactus Servlet Example I

public void testReadServletOutputStream() throws IOException

{

SampleServlet servlet = new SampleServlet();

servlet.doGet(request, response);

}

public void endReadServletOutputStream

(HttpURLConnection theConnection)

throws IOException

{

assertEquals("<html><head/><body>A GET request</body></html>",

AssertUtils.getResponseAsString(theConnection));

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus Servlet Example IICactus Servlet Example II

public void beginSendParams(ServletTestRequest theRequest)

{

theRequest.addParameter("param1", "value1");

theRequest.addParameter("param2", "value2");

}

public void testSendParams()

{

SampleServlet servlet = new SampleServlet();

Hashtable params = servlet.getRequestParameters(request);

assert(params.get("param1") != null);

assert(params.get("param2") != null);

assertEquals("value1", params.get("param1"));

assertEquals("value2", params.get("param2"));

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus Servlet Example IIICactus Servlet Example III

public void beginXXX(WebRequest theRequest) {

theRequest.setURL("jakarta.apache.org", "/mywebapp",

"/test/test.jsp", null, null);

theRequest.addCookie("cookiename", "cookievalue"); }

public void testXXX() {

MyServletToTest servlet = new MyServletToTest();

servlet.init(config);

servlet.methodToTest(); // Servlet methods

assertEquals("someValue", session.getAttribute("someAttribute"));

assertEquals("jakarta.apache.org", request.getServerName());

}

public void endXXX(WebResponse theResponse) {

cookie = theResponse.getCookie("cookiename");

assertEquals("cookievalue", cookie.getValue());

assertEquals("some content here", theResponse.getText());

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus JspTestCaseCactus JspTestCase

AttributeAttribute KlasseKlasseconfigconfig javax.servlet.ServletConfigjavax.servlet.ServletConfig

sessionsession javax.servlet.http HttpSessionjavax.servlet.http HttpSession

responseresponse javax.servlet.http HttpServletResponsejavax.servlet.http HttpServletResponse

requestrequest javax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletRequest

outout javax.servlet.jsp.JspWriterjavax.servlet.jsp.JspWriter

pageContextpageContext org.apache.cactus.server.PageContextWarporg.apache.cactus.server.PageContextWarpperper

Implizite Attribute der JspTestCase Klasse

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus JSP Example ICactus JSP Example Ipublic class ForwardTest extends JspTestCase

{...

public void testForward() throws ServletException,IOException {

pageContext.forward("/test/test.jsp") ;

}

public void endForward(HttpURLConnection theConnection) throws IOException {

StringBuffer sb = new StringBuffer();

BufferedReader input = new BufferedReader(

new InputStreamReader(theConnection.getInputStream()));

while (null != ((String str = input.readLine()))) {

sb.append(str);

}

input.close ();

assertEquals( "<html><body>Hello !</body></html>", sb.toString());

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus JSP Example IICactus JSP Example II

public class ForwardTest extends JspTestCase

{...

public void testForward() throws ServletException,IOException {

pageContext.forward("/test/test.jsp") ;

}

public void endForward(WebResponse theResponse) {

assertEquals(

"<html><body>Hello !</body></html>",

theResponse.getText() );

}

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus EJB Example aCactus EJB Example apublic class ConverterTest extends ServletTestCase {

...

private Converter converter ;

public void setUp() throws Exception {

Context ctx = new InitialContext();

ConverterHome home = (ConverterHome)

PortableRemoteObject.narrow(

ctx.lookup("java:comp/ejb/Converter"),ConverterHome.class);

this.converter = home.create();

}

...

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus EJB Example bCactus EJB Example bpublic class ConverterTest extends ServletTestCase {

...

public void testConvert() throws Exception {

assertNotNull("Can‘t access Converter", converter) ;

double dollar = this.converter.convertYenToDollar(100.0);

assertEquals("dollar", 1.0, dollar, 0.01);

}

public void tearDown() throws Exception {

if( converter != null)

this.converter.remove() ;

}

}

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus EJB Example cCactus EJB Example c<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>

<servlet> <servlet-name>ServletRedirector</servlet-name> <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class> </servlet>

<servlet-mapping> <servlet-name>ServletRedirector</servlet-name> <url-pattern>/ServletRedirector/</url-pattern> </servlet-mapping>

[...]

<ejb-ref>

<ejb-ref-name>ejb/Converter</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>org.apache.cactus.sample.ejb.ConverterHome</home> <remote>org.apache.cactus.sample.ejb.Converter</remote>

</ejb-ref>

</web-app>

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus DemoCactus Demo

Test, ob Session und Test, ob Session und ServletContext korrekt gestartet ServletContext korrekt gestartet sindsind

Pizza und Ingredient testenPizza und Ingredient testen TagLib Test im “Build TagLib Test im “Build

Verification“-AbschnittVerification“-Abschnitt

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Cactus AnmerkungenCactus Anmerkungen

White Box TestWhite Box Test Unterstützung vieler Servlet ContainerUnterstützung vieler Servlet Container Remote Testing via HTTPRemote Testing via HTTP Test von Client und Server ZuständeTest von Client und Server Zustände Pro Testfall zwei HTTP Verbindungen Pro Testfall zwei HTTP Verbindungen

( response, result)( response, result) Testbarkeit aller J2EE KomponentenTestbarkeit aller J2EE Komponenten Version 1.3 verfügbarVersion 1.3 verfügbar

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Agenda IntegrationAgenda Integration

Build VerficationBuild Verfication AntAnt CruiseControlCruiseControl

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Build VerficationBuild Verfication

Tägliche Integration der Tägliche Integration der ÄnderungÄnderung

Automatisches Erzeugen via ant Automatisches Erzeugen via ant buildbuild PreparePrepare CompileCompile PackagingPackaging DeployDeploy TestTest ReleaseRelease

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Build Verification TestBuild Verification Test

Continuous IntegrationContinuous Integration Martin FowlerMartin Fowler Matthew FoemmelMatthew Foemmel

Self Testing CodeSelf Testing Code Complete Automatic TestComplete Automatic Test Single SourceSingle Source Master BuildMaster Build Cruisecontrol 1.2.1aCruisecontrol 1.2.1a

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT ArchitekturBVT ArchitekturCruiseControl

Ant build

resourcesrcweb

Project

WebClient

Test Web Container

buildservlet

Source

checking

CVS

files

checkout

masterbuild

cruisecontrol

Build timer

test

deploy

produce

JMX AdminMail Client

JavaMail

Logfiles

protocol

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT CruiseControlBVT CruiseControl

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT JMX AdminBVT JMX Admin

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT DemoBVT Demo

Starten der DiensteStarten der Dienste Einbringen einer ÄnderungEinbringen einer Änderung Beobachten des Beobachten des

IntegrationslaufsIntegrationslaufs BenachrichtigungBenachrichtigung Anschauen der ProtokolleAnschauen der Protokolle AdministrationAdministration

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT Ergebnisse IBVT Ergebnisse I

Verantwortung des Teams Verantwortung des Teams wächstwächst

Hohe Sicherheit der Stabilität Hohe Sicherheit der Stabilität der Änderungder Änderung

Anzahl der TestCases wächst Anzahl der TestCases wächst stärker vor Releasesstärker vor Releases

Nicht der gesamte Code muss Nicht der gesamte Code muss getestet werdengetestet werden

Testfälle und Abdeckung Testfälle und Abdeckung müssen beobachtet werden -> müssen beobachtet werden -> Review der TestfälleReview der Testfälle

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

BVT Ergebnisse IIBVT Ergebnisse II

Zeitplan muss Testfall- Zeitplan muss Testfall- Anpassungen bei ReDesign Anpassungen bei ReDesign berücksichtigenberücksichtigen

Zeitersparnisse der Zeitersparnisse der Integrationstest vs. Pflege der Integrationstest vs. Pflege der TestfälleTestfälle

Review der Kodierung der Review der Kodierung der TestfälleTestfälle

Konventionen und Pattern Konventionen und Pattern suchen suchen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Tipps und Tricks ITipps und Tricks I

Aufteilen der Erzeugnisse eines Aufteilen der Erzeugnisse eines ProjektesProjektes

Suche nach hilfreichen ant tasksSuche nach hilfreichen ant tasks Cactus,Quick,Jtidy,Junit, jspcCactus,Quick,Jtidy,Junit, jspc

Erweiterung des xsl-Skript durch Erweiterung des xsl-Skript durch Links auf die ErweiterungenLinks auf die Erweiterungen

Integration sollte auf Integration sollte auf Produktionsplattform ablaufenProduktionsplattform ablaufen

Schnelle ReaktionenSchnelle Reaktionen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Tipps und Tricks IITipps und Tricks II

Test von verschiedenen Server Test von verschiedenen Server mit Cactusmit Cactus

JSP Compiler (Tomcat JSPC) JSP Compiler (Tomcat JSPC) zum Syntax Checkzum Syntax Check

Automatische Installation eines Automatische Installation eines ReleasesReleases

Markieren eines Erfolgreichen Markieren eines Erfolgreichen Builds mit CURRENT TagBuilds mit CURRENT Tag

Integration von StatistikenIntegration von Statistiken Anzahl Klassen vs TestklassenAnzahl Klassen vs Testklassen Anzahl erfolgreicher Builds Anzahl erfolgreicher Builds

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Tipps und Tricks IIITipps und Tricks III

Durchführung des TestsDurchführung des Tests BuildBuild JSPC TestJSPC Test Java Beans TestJava Beans Test DeploymentDeployment Validierung der Deployment Validierung der Deployment

DescriptorenDescriptoren Start der ServerStart der Server Serverseitige TestfälleServerseitige Testfälle Sicherung der ErgebnisseSicherung der Ergebnisse

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Tipps und Tricks IVTipps und Tricks IV

Gesamtes Team bekommt Gesamtes Team bekommt CruiseControl Status EmailCruiseControl Status Email

Verantwortlichen für die Verantwortlichen für die Stabilität des Integrationstest Stabilität des Integrationstest bennenenbennenen

Besetzung der Rolle DeployersBesetzung der Rolle Deployers Grenze zwischen Grenze zwischen

Qualitätssicherung und Qualitätssicherung und Entwicklertest vereinbaren Entwicklertest vereinbaren

Wartung der TestCase einplanenWartung der TestCase einplanen

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Noch nicht genug!Noch nicht genug!

Mailto: pr@webapp.deMailto: pr@webapp.de „„Play with the Tools!“Play with the Tools!“ http://www.tom4.dehttp://www.tom4.de Lassen Sie sich von mir beraten.Lassen Sie sich von mir beraten.

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

TesttoolsTesttoolsCruiseControlCruiseControl http://cruisecontrol.sourceforge.net/http://cruisecontrol.sourceforge.net/

JMeterJMeter http://java.apache.org/jmeter/http://java.apache.org/jmeter/

WatchdogWatchdog http://jakarta.apache.org/watchdog/http://jakarta.apache.org/watchdog/

JUnitJUnit http://www.junit.org/http://www.junit.org/

CactusCactus http://jakarta.apache.org/commons/cactus/http://jakarta.apache.org/commons/cactus/index.htmlindex.html

JUnitXJUnitX http://www.exterme-java.de/http://www.exterme-java.de/

JTestJTest http://www.parasoft.com/products/jtest/http://www.parasoft.com/products/jtest/index.htmindex.htm

http://www.javaworld.com/jw-03-2001/jw-http://www.javaworld.com/jw-03-2001/jw-0323-lw-jtest.html0323-lw-jtest.html

QACenterQACenter http://www.compuware.com/products/http://www.compuware.com/products/qacenter/qacenter/

Jbuilder OpentoolsJbuilder Opentools http://www.borland.com/http://www.borland.com/

AntAnt http://jakarta.apache.org/ant/http://jakarta.apache.org/ant/

Rational Test SuiteRational Test Suite http://www.rational.com/http://www.rational.com/

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Test VeröffentlichungenTest Veröffentlichungen

Junit PrimerJunit Primer http://www.clarkware.com/articles/http://www.clarkware.com/articles/JUnitPrimer.htmlJUnitPrimer.html

Test Infect EJBTest Infect EJB http://www.javaworld.com/javaworld/jw-05-http://www.javaworld.com/javaworld/jw-05-2000/jw-0526-testinfect.html2000/jw-0526-testinfect.html

HttpUnitHttpUnit http://httpunit.sourceforge.net/http://httpunit.sourceforge.net/

Servlet TestingServlet Testing http://www.delphis.com/javacon2000/http://www.delphis.com/javacon2000/servlet.htmlservlet.html

JunitservletJunitservlet http://sourceforge.net/projects/junitservlethttp://sourceforge.net/projects/junitservlet

J2EEUnitJ2EEUnit http://sourceforge.net/projects/j2eeunit/http://sourceforge.net/projects/j2eeunit/

JUnitPerfJUnitPerf http://www.clarkware.com/software/http://www.clarkware.com/software/JUnitPerf.htmlJUnitPerf.html

JUnit best practices JUnit best practices http://www.javaworld.com/javaworld/jw-12-http://www.javaworld.com/javaworld/jw-12-2000/jw-1221-junit_p.html2000/jw-1221-junit_p.html

Continuous IntegrationContinuous Integration http://www.martinfowler.com/articles/http://www.martinfowler.com/articles/continuousIntegration.htmlcontinuousIntegration.html

Junit.org ArticlesJunit.org Articles http://www.junit.org/articles.htmhttp://www.junit.org/articles.htm

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

Test-BücherTest-BücherHightower/Lesiecki (Wiley Hightower/Lesiecki (Wiley 2001)2001)

Java Tools for eXtreme Programming Java Tools for eXtreme Programming

http://www.rickhightower.com/JavaXPToolkit/http://www.rickhightower.com/JavaXPToolkit/

Newkrik/Martin (Addsion Newkrik/Martin (Addsion Weseley 2001)Weseley 2001)

Extreme Programming in PracticeExtreme Programming in Practice

Splaine/Jaskiel (STQE Splaine/Jaskiel (STQE Publishing 2001Publishing 2001

The Web Testing HandbookThe Web Testing Handbook

Link (dpunkt verlag 2002)Link (dpunkt verlag 2002) Unit Tests mit JavaUnit Tests mit Java

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

JSP-BücherJSP-BücherFields/Kolb (Manning 2000)Fields/Kolb (Manning 2000) Web Development with Java Server PagesWeb Development with Java Server Pages

Kassem et al. (Addison Kassem et al. (Addison Wesley 2000)Wesley 2000)

Designing Enterprise Applications with the Designing Enterprise Applications with the Java 2 Plattform, Enterprise Edition (APM-Java 2 Plattform, Enterprise Edition (APM-Book)Book)

Pekowsky ( Addison Pekowsky ( Addison Wesley 2000)Wesley 2000)

JavaServer PagesJavaServer Pages

Turau (IX- dpunkt 2000)Turau (IX- dpunkt 2000) Java Server Pages -Dynamische Java Server Pages -Dynamische Generierung von Web-DokumentenGenerierung von Web-Dokumenten

Avedal et al. (Wrox 2000)Avedal et al. (Wrox 2000) Professional JSPProfessional JSP

Bergsten ( O‘Reilly 2000)Bergsten ( O‘Reilly 2000) JavaServerPagesJavaServerPages

Rossbach/Schreiber Rossbach/Schreiber (1999,2000)(1999,2000)

Java Server und ServletsJava Server und Servlets

(c) 2002 by Peter Roßbach pr@webapp.de – JAX 2002

LinksLinksSun JSP Home PageSun JSP Home Page http://java.sun.com/jsp/http://java.sun.com/jsp/

OReilly JSP BookOReilly JSP Book http://www.TheJspBook.com/http://www.TheJspBook.com/

Jakarta(Tomcat, Ant, Taglib...)Jakarta(Tomcat, Ant, Taglib...) http://jakarta.apache.org/http://jakarta.apache.org/

Jsp TutorialJsp Tutorial http://www.ix.heise.de/ix/artikel/2000/07/152/http://www.ix.heise.de/ix/artikel/2000/07/152/

http://http://www.ix.heise.dewww.ix.heise.de/ix/artikel/2000/08/148//ix/artikel/2000/08/148/

http://www.ix.heise.de/ix/artikel/2000/09/172/http://www.ix.heise.de/ix/artikel/2000/09/172/

Manning BookManning Book http:/jspTags.com/http:/jspTags.com/

Jason Hunter SiteJason Hunter Site http://www.servlets.com/http://www.servlets.com/

JawaWorldJawaWorld http://www.javaworld.com/http://www.javaworld.com/

Bea Bea http://www.bea.com/http://www.bea.com/

OrionOrion http://www.orionserver.com/http://www.orionserver.com/

Jrun AllaireJrun Allaire http://www.alliare.com/jrun/http://www.alliare.com/jrun/

WebApp FrameworkWebApp Framework http://www.webapp.de/http://www.webapp.de/

top related