1 / 24

Testen von Webanwendungen mit HttpUnit und Cactus

Testen von Webanwendungen mit HttpUnit und Cactus. Volker Frehe. Agenda. Motivation Testen mit JUnit Testen mit HttpUnit Testen mit Cactus Zusammenfassung. Motivation. Webanwendungen werden immer komplexer Keine reine Informationsvermittlung Abwicklung von Geschäftprozessen Problem

jana-joseph
Download Presentation

Testen von Webanwendungen mit HttpUnit und Cactus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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!

More Related