jsp-develop.de presents:

Funktionstests mit HttpUnit

von shark,  13.01.2002 20:45:54

Einer der Eckpfeiler von XP sind funktionale Tests mit JUnit und HttpUnit. Jeder Entwickler kennt das Problem der Integration neuer Funktionen in eine Anwendung und die sich daraus ergebenden Programmfehler. Oftmals fehlt im Projektverlauf die Zeit, die komplette Anwendung neu zu testen, wodurch eine gewisse Unsicherheit entsteht die man gerne in Kauf nimmt, wenn der Kunde bereits zum Sprung angesetzt hat.

Der Bedarf für ein Testframework mit dem Anwendungen automatisiert und komplett getestet werden können ist deshalb gross.

HttpUnit ist ein Testframework, welcher das automatisierte Testen von Web-Anwendungen erlaubt. HttpUnit simuliert einen Web-Client, der Requests senden und Responses empfangen kann. Im zugrundeliegenden Request-/Response-Modell kann der Status eines Web-Clients ermittelt und ausgewertet werden.

HttpUnit ist eine Open Source Software und kann unter folgendem Link bezogen werden: http://sourceforge.net/projects/httpunit

Damit HttpUnit reibungslos funktioniert, muss das JTidy-Package installiert worden sein: http://sourceforge.net/projects/jtidy

Die Klassen- bzw. Jar-Dateien beider Packages müssen im Java Classpath vorliegen.

Das nachfolgende Beispiel zeigt ein sehr einfaches HttpUnit-Anwendungsbeispiel:

<!--
Html-Seite in der nach der Eingabe eines Wertes auf die nachfolgende Seite "show.jsp" gesprungen wird. In der "show.jsp" Seite wird der zuvor eingegebene Wert ausgegeben.
-->
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>HttpUnit Testanwendung</title>
</head>
<body>
  <form action="show.jsp">
    <font size="4"><b><u>HttpUnit-Test</u></b></font>
    <input type="text" name="eingabefeld" size="24">
    <input type="submit" name="senden">
  </form>      
</body>
</html>

<!--
"show.jsp" ist eine Seite zum Ausgeben des zuvor eingegebenen Wertes.
-->
<%@page language="java" contentType="text/html"%>
<html>
<head>
<title>HtppUnit Testanwendung</title>
</head>
<body>
<%String lstrEingabefeld = request.getParameter("eingabefeld");%>
<%=lstrEingabefeld%>
</body>
</html>

/*
Die Klasse "TestCase" simuliert den Client-Browser und stellt somit auf Basis von HttpUnit eine Testumgebung fuer unser Beispiel dar.
*/

// Imports
import com.meterware.httpunit.*;
import java.io.IOException;
import java.net.MalformedURLException;
import org.xml.sax.*;

// Testklasse
public class TestCase
{
  // Hauptfunktion
  public static void main(String[] params)
  {       
    try
    {
      // Lokale Variablen           
      WebRequest  loRequest = null;           
      WebResponse loResponse= null;           

      // Initialisiere HttpUnit 
      WebConversation loConversation = new WebConversation();                       

      // Erzeuge einen Web-Request
      loRequest  = new GetMethodWebRequest("http://localhost:80/test/index.html");           

      // Ermitteln der Response-Nachricht
      loResponse = loConversation.getResponse(loRequest);

      // Ausgabe des Requests und Responses
      System.out.println(loRequest);
      System.out.println("---------");
      System.out.println(loResponse);
      System.out.println("---------");

      // Ermitteln der Eingabeform
      WebForm testForm = loResponse.getForms()[0];

      // Erzeuge Web-Request
      loRequest = testForm.getRequest();
       
      // Setzen der Formparameter 
      loRequest.setParameter("eingabefeld", "testwert");           

      // Ermitteln der Response-Message
      loResponse = loConversation.getResponse(loRequest);

      // Ausgabe des Requestes und Responses
      System.out.println(loRequest);
      System.out.println("---------");
      System.out.println(loResponse);
    }
    catch (Exception ex)
    {
      System.err.println("Exception: " + ex);       
    }   
  }
}

Für die Kompilierung der Klasse "TestCase" gibt man in einer Dos-Box folgendes Kommando ein: "javac TestCase.java". Die compilierte Klasse "TestCase.class" kopiert man in den Java Classpath. Nach dem Starten einer neuen Dos-Box wird der Testfall durch Eingabe des Kommandos: "java TestCase" gestartet.

Nach dem Starten des Testfalles sieht man in der Dos-Box die entsprechenden Request- und Response-Nachrichten. Das hier vorliegende Beispiel ist bewusst sehr einfach gehalten worden. Für komplexe Testfälle sollte die dem HttpUnit-Package beiliegende API-Beschreibung konsultiert werden.
URL dieses Beitrags:
http://www.jsp-develop.de/forumbeitrag/view/665/