Testen von Webanwendungen mit HttpUnit und Cactus - PowerPoint PPT Presentation

jana-joseph
testen von webanwendungen mit httpunit und cactus n.
Skip this Video
Loading SlideShow in 5 Seconds..
Testen von Webanwendungen mit HttpUnit und Cactus PowerPoint Presentation
Download Presentation
Testen von Webanwendungen mit HttpUnit und Cactus

play fullscreen
1 / 24
Download Presentation
Testen von Webanwendungen mit HttpUnit und Cactus
96 Views
Download Presentation

Testen von Webanwendungen mit HttpUnit und Cactus

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Testen von Webanwendungen mit HttpUnit und Cactus Volker Frehe

  2. Agenda • Motivation • Testen mit JUnit • Testen mit HttpUnit • Testen mit Cactus • Zusammenfassung

  3. Motivation • Webanwendungen werden immer komplexer • Keine reine Informationsvermittlung • Abwicklung von Geschäftprozessen • Problem • Fehler öffentlich • Unzufriedene Kunden  Vertrauensverlust • Falsche Rechnungen o.ä.  Umsatzeinbußen • Fehlerbehebung im Endprodukt teuer oder unmöglich • Lösung • Testen während der Entwicklung (try & error) • Einsatz von Tools zum automatisierten Testen

  4. Testen mit JUnit - Grundlagen • Open Source Framework zur Erzeugung von Unit-Tests für Java-Anwendungen • Unit-Tests testen Komponenten eines Systems, z.B. Klassen oder Methoden • Testfälle sind in Java geschriebene Klassen • Integration des Frameworks in Entwicklungsumgebung, wie z.B. Eclipse, möglich

  5. Testen mit JUnit - Testaufbau • Aufbau der Testfälle nach folgendem Muster: • Aufbauen und Initialisieren der benötigten Strukturen (Erzeugung der notwendigen Objekte, …) • Aufruf der zu testenden Methode • Überprüfen der Methode (mit assert-Methoden) • Aufräumen der verwendeten Strukturen • Methoden setUp() und tearDown() werden vor bzw. nach jeder Testmethode zur Initialisierung und zum Aufräumen ausgeführt • Testmethoden werden testXXX() benannt um von JUnit automatisch erkannt zu werden – verschiedene Tests werden nacheinander ausgeführt

  6. Testen mit JUnit - Testauswertung • Mit Assert-Methoden werden Test-Bedingungen formuliert welche wahr sein müssen • Häufigste verwendete Methode: assertEquals ([String message,] expected, actual) • message optionaler Parameter, welcher bei Fehlschlag ausgegeben wird • expected und actual werden auf Übereinstimmung getestet • assertEquals liefert true bei erfolgreicher Ausführung und false bei fehlgeschlagener Ausführung zurück • weitere Assert-Methoden z.B. für bestimmte Datentypen oder auf eine Bedingung

  7. Testen mit JUnit - Testausführung • Ausführung der Testfälle mit dem JUnit TestRunner • 2 Arten von Testrunner – grafisch und textuell • Aufruf entweder direkt aus Entwicklungsumgebung oder per Kommandozeile • java junit.swingui.TestRunnerKlassenname • Ergebnis wird mittels farbigem Balken dargestellt (Fehler werden ebenfalls ausgegeben)

  8. Testen mit JUnit - Beispiel • Zu testende Methode public double Wurzel(double Zahl){ … //eigene Methode zur Erzeugung einer Wurzel } • Testklasse import junit.framework.*; public class TestRechner extends TestCase{ public TestRechner(String name){String name} super(name); } public void testWurzel(){ double Zahl = 276545; Wurzel1 = Wurzel(Zahl); Wurzel2 = Math.sqrt(Zahl); asserEquals(Wurzel2, Wurzel1, 0.0001); //0.0001 = Genauigkeit } public static void main(String[] args) { junit.swingui.TestRunner.run(TestRechner.class); } }

  9. Testen mit HttpUnit - Grundlagen • Framework zur Erweiterung von JUnit zur Ausführung von funktionalen Tests für Webseiten • Schnittstelle zwischen Testprogramm und Http-Protokoll • Simuliert Eigenschaften eines Browsers zur Http Authentifikation • Bereitstellung von Methoden zum Umgang mit • Formularen • Tabellen • Links • Cookies • Frames • Sessions • …

  10. Testen mit HttpUnit - Anfrage • 3 Klassen zum Senden einer Anfrage und Empfangen des Resultates notwendig • WebConservation • baut Verbindung auf und startet die Sitzung • WebRequest • formuliert Anfrage welche an Server gesendet wird • Web Response • erhält Antwort vom Server • Beispiel: WebConservation conv = new WebConversation(); WebRequest req = GetMethodWebRequest("http://www.url.de"); WebResponse response = conv.getResponse(req);

  11. Testen mit HttpUnit - Formulare • Methoden zum ausführen von Formularen • Mit Methode getForms() der Klasse WebResponse Auswahl des relevanten Formulars • getRequest() wählt Ziel-Url des Formulars • setParameter() füllt Formulardaten aus • Beispiel WebConversation conv = new WebConversation(); WebResponse resp = conv.getResponse("http://www.url.de"); WebForm form = response.getForms()[0]; WebRequest loginreq = form.getRequest(); loginreq.setParameter ("username", Volker); loginreq.setParameter ("password", meinPasswort); WebResponse loginresp = conv.getResponse(loginreq);

  12. Testen mit HttpUnit - Selektion • Selektion von Teilen der Antwort zur Analyse durch diverse Methoden der Klasse WebResponse möglich • getTables()[0] liefert erste Tabelle als WebTable Objekt (Zugriff auf einzelne Zellen möglich) • getText() liefert Antwort als kompletten Text (inklusive Header) • getTitle() liefert Seitentitel • getNewCookieNames()[] listet alle Cookies auf – Werte können mit getNewCookieValue(String name) ausgelesen werden • ... • getDOM() liefert ein org.w3c.dom.Document • Baumstruktur ermöglicht Suchen nach Inhalt • Auswahl z.B. über XPath

  13. Testen mit HttpUnit - Auswertung • Auswertung der Ergebnisse durch von JUnit bereitgestellte assert-Methoden • Ergebnis-Darstellung im JUnit TestRunner • Beispiel eines Login-Testfalls: import junit.framework.*; import com.meterware.httpunit.*; public class TestWebSite extends TestCase{ public TestWebsite(String name){ super(name); } public void testLogin(){ WebConversation conv = new Webconversation(); WebResponse resp = conv.getResponse("http://www.url.de"); WebForm form = response.getForms()[0]; WebRequest loginreq form.getRequest(); loginreq.setParameter ("username", Volker); loginreq.setParameter ("password", meinPaswort); WebResponse loginresp = conv.getResponse(loginreq); assertEquals ("Interner Bereich", loginresponse.getTitle()); } public static void main(String[] args) { junit.swingui.TestRunner.run(TestWebsite.class); } }

  14. Testen mit HttpUnit - Zusammenfassung • Ausführung von funktionalen Tests von Webanwendungen • Umgang mit Formularen möglich • Überprüfung der zurück gelieferten Daten mit Hilfe der JUnit assert-Methoden • Testen beschränkt sich auf zurück gelieferte Seiten • Quelltext muss (meist) nicht bekannt sein • aber Informationen über die erwarteten Ergebnisse

  15. Testen mit Cactus - Grundlagen • Open Source Framework zur Erweiterung von JUnit zum Testen von serverseitigen Java-Anwendungen • Testen von Servlets, JSPs, Filtern und EJBs möglich • Installation auf Client sowie auf Server notwendig • Ausführung der Tests auf Client, sowie auf Serverseite • 2 Http-Kanäle werden geöffnet • Weitere Betrachtung nur von Servlets • hohe Übereinstimmung zu JSPs, Filtern und EJBs

  16. Testen mit Cactus - Funktionsweise • begin() und end() werden auf Clientseite vor bzw. nach jedem Test ausgeführt • setUp() und tearDown() verfahren ebenso auf Serverseite • beginXXX() und endXXX() werden auf Client für den spezifischen Testfall vor Übermittlung an bzw. nach Empfang der Daten von dem Redirector ausgeführt • Redirector arbeitet als Schnittstelle – Übergabe der Daten von Client an Server, so wie Sammlung und Rücklieferung der Ergebnisse

  17. Testen mit Cactus - Redirector • Redirector arbeitet auf Serverseite wie TestRunner auf Clientseite • Verschieden Java-Anwendungen benutzen verschiedene Redirector • Eintrag in web.xml Datei auf Server bestimmt welcher Redirector benutzt wird und wo er liegt • Beispiel-Eintrag zum Testen von Servlets: <filter> <filter-name>ServletRedirector</filter-name> <filter-class> org.apache.cactus.server.ServletTestRedirector </filter-class> </filter> <filter-mapping> <filter-name>ServletRedirector</filter-name> <url-pattern>/ServletRedirector</url-pattern> </filter-mapping>

  18. Testen mit Cactus – Anfrage • Die Anfrage an den Server wird auf Clientseite in der beginXXX()-Methode erstellt public void beginXXX(WebRequest theRequest){ theRequest.setURL("url.de", "/app", "test.jsp", null, null); } • Weitere Parameter zur Ausführung des Servlet können mit setParameter() hinzugefügt werden • Methoden auf Serverseite wird das erstellte WebRequest Objekt automatisch unter dem Namen request zur Verfügung gestellt

  19. Testen mit Cactus – Auswertung • Auswertung auf Server und auf Clientseite • Auf Serverseite in der Methode testXXX() • Initialisierung des Servlets • Ausführung einzelner Methoden des Servlets • Überprüfung durch assert-Methoden • Ergebnisse werden vom Redirector gesammelt und zusammen mit der zurück gelieferten Seiten an den Client geschickt • Auswertung des Resultats in der endXXX() Methode auf Clientseite • Fehler (aus endXXX() und testXXX()) werden im TestRunner ausgegeben

  20. Testen mit Cactus – Beispiel 1/2 • Servlet bekommt eine Zahl übergeben, quadriert sie und liefert das Ergebnis zurück: import java.io.*; import javax.servlet.*; public class RechnerServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println("<html><head><body>"); out.println("Ergebnis: "+quadrat(request.getParameter("zahl"))); out.println("</body></html>"); out.close(); } public double quadrat(double x){ return (x*x); } }

  21. Testen mit Cactus – Beispiel 2/2 • Test import junit.framework.*; import org.apache.cactus.*; public class TestRechner extends TestCase{ public TestRechner(String name){ super(name); } public void beginQuadrat(WebRequest theRequest){ theRequest.setURL("url.de", "/mywebapp", "rechner.jsp", null, null); theRequest.setParameter("zahl", "3"); } public void testXXX(){ Rechnerservlet servlet = new Rechnerservlet(); servlet.init(config); assertEquals("25", servlet.quadrat(5)); } public void endXXX(WebResponse theResponse){ assertEquals("Ergebnis: 9", theResponse.getText()); } public static void main(String[] args) { junit.swingui.TestRunner.run(TestRechner.class); } }

  22. Testen mit Cactus - Zusammenfassung • Möglichkeit Servlets, JSPs, Filter so wie EJBs zu testen • JSPs, Filter und EJBs synonym zu Servlets, lediglich kleine Änderungen (z.B. Redirector) • 2 verschiedene Tests • Clientseite testet zurück geliefertes Ergebnis • Serverseite testet einzelne Methoden • Um einzelne Methoden zu prüfen, muss Quelltext bekannt sein

  23. Zusammenfassung und Fazit • Cactus und HttpUnit bieten unterschiedliche Testarten für Webseiten • HttpUnit • Testet Webseiten auf Funktionalität • Keine Informationen über Quelltext nötig • Cactus • Testet serverseitige Java-Anwendungen • Test des gesamten Servlet als auch einzelner Methoden • Informationen über Quelltext nötig • Keine Konkurrenz zwischen den Frameworks, sondern Ergänzung • Mittlerweile Integration von HttpUnit in Cactus möglich

  24. Ende Vielen Dank für die Aufmerksamkeit!