HttpUnit ermöglicht Black-Box-Akzeptanztests von Webanwendungen.
Es simuliert interaktive Website-Besuchssequenzen und prüft die Funktionalität von SSL, HTTP-Header, Frames, Tabellen, Formulare, Links, JavaScript und Cookies.
Legen Sie ein Projektverzeichnis an, z.B.
'D:\MeinWorkspace\HttpUnitMitGoogle'.
Erzeugen Sie in diesem Projektverzeichnis folgende Unterverzeichnisse:
- <projektverzeichnis>\src
- <projektverzeichnis>\src\meinpackage
Speichern Sie im Unterverzeichnis '<projektverzeichnis>\src\meinpackage' die folgende Datei 'HttpUnitMitGoogle.java':
package meinpackage;
import com.meterware.httpunit.*;
import junit.framework.*;
public class HttpUnitMitGoogle extends TestCase
{
public void testGoogle() throws Exception
{
String url = "http://www.google.de/";
String qry = "Torsten Horn Java";
String lnk = "Weitere Ergebnisse von www.torsten-horn.de";
String fnd = "http://www.torsten-horn.de";
HttpUnitOptions.setExceptionsThrownOnScriptError( false );
WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( url );
WebResponse response = conversation.getResponse( request );
assertNotNull( "Kein Response von URL '" + url + "'.", response );
System.out.println( "\nResponse von URL '" + url + "'." );
WebForm form = response.getFormWithName( "f" );
assertNotNull( "Formular nicht gefunden.", form );
System.out.println( "Formular gefunden." );
form.setParameter( "hl", "de" );
form.setParameter( "q", qry );
response = form.submit( form.getSubmitButton( "btnG" ) );
assertNotNull( "Seite mit Suchergebnissen zu '" + qry + "' nicht erhalten.", response );
System.out.println( "Seite mit Suchergebnissen zu '" + qry + "' erhalten." );
WebLink link = response.getLinkWith( lnk );
assertNotNull( "Link zu '" + lnk + "' nicht gefunden", link );
System.out.println( "Link zu '" + lnk + "' gefunden" );
request = link.getRequest();
response = conversation.getResponse( request );
assertNotNull( "Seite zu '" + lnk + "' nicht erhalten.", response );
System.out.println( "Seite zu '" + lnk + "' erhalten." );
WebLink[] resultLinks = response.getLinks();
assertNotNull( "Keine Links auf der Suchergebnis-Seite gefunden.", resultLinks );
System.out.println( "" + resultLinks.length + " Links gefunden, darunter:\n" );
for( int i=0; i<resultLinks.length; i++ ) {
url = resultLinks[i].getURLString();
if( 0 <= url.toLowerCase().indexOf( fnd )
&& !"".equals( resultLinks[i].getText() ) ) {
System.out.println( url );
}
}
}
public static void main( String[] args ) throws Exception
{
junit.textui.TestRunner.run( HttpUnitMitGoogle.class );
}
}
Die Methode 'testGoogle()' ruft über 'url' die Google-HTML-Seite auf, sucht darin das Formular 'f', setzt darin den Parameter für die Sprache 'hl=de' und den für die Suchabfrage 'q=qry' und betätigt den Submit-Button 'btnG'. In der Antwort-HTML-Seite wird der Link 'lnk' gesucht und aufgerufen. In der hierauf folgenden HTML-Seite werden alle Links auf die Domain 'fnd' gesammelt und angezeigt.
Falls die Abfrage nicht funktioniert, muss überprüft werden, ob die Google-Bezeichnernamen 'f', 'hl', 'q' und 'btnG' sich vielleicht geändert haben, indem Sie den Quelltext der Google-Seiten studieren.
Javadoc zum HttpUnit-API finden Sie unter http://httpunit.sourceforge.net/doc/api/.
Javadoc zum JUnit-API (z.B. zu 'TestCase', 'assert...()', 'TestRunner') finden Sie unter http://junit.sourceforge.net/javadoc/.
Infos zu JUnit finden Sie unter techdocs/java-junit.htm.
Speichern Sie im '<projektverzeichnis>' die folgende Ant-Build-Datei 'build.xml':
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="HttpUnitMitGoogle" default="run" >
<property name="application" value="meinpackage.HttpUnitMitGoogle"></property>
<property name="httpunit.dir" location="D:/MeinWorkspace/HttpUnitMitGoogle/httpunit-1.7"></property>
<property name="src.dir" location="src"></property>
<property name="build.dir" location="bin"></property>
<path id="httpunit.classpath">
<fileset dir="${httpunit.dir}/jars" includes="*.jar"/>
<fileset dir="${httpunit.dir}/lib" includes="*.jar"/>
</path>
<target name="compile">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath>
<path refid="httpunit.classpath"/>
<pathelement path="${build.dir}"/>
</classpath>
</javac>
</target>
<target name="run" depends="compile">
<java classname="${application}">
<classpath>
<path refid="httpunit.classpath"/>
<pathelement path="${build.dir}"/>
</classpath>
</java>
</target>
</project>
(Passen Sie darin den Pfad 'D:/MeinWorkspace/HttpUnitMitGoogle/httpunit-1.7' an Ihr HttpUnit-Verzeichnis an.)
Das Apache Ant Manual finden Sie unter http://ant.apache.org/manual.
Die Projektstruktur sieht jetzt so aus:
[D:\MeinWorkspace\HttpUnitMitGoogle] |- [httpunit-1.7] | |- ... | |- [jars] | | '- ... | |- [lib] | | '- httpunit.jar | '- ... |- [src] | '- [meinpackage] | '- HttpUnitMitGoogle.java '- build.xml
Öffnen Sie ein Kommandozeilenfenster und geben Sie folgende Kommandos ein:
cd \MeinWorkspace\HttpUnitMitGoogle
ant
(Passen Sie den Pfad 'D:\MeinWorkspace\HttpUnitMitGoogle' an Ihr '<projektverzeichnis>' an.)
Die Java-Sourcen werden compiliert, der Testlauf wird gestartet und die Ergebnisse werden im Textmodus angezeigt.
Öffnen Sie ein Kommandozeilenfenster und geben Sie folgende Kommandos ein:
cd \MeinWorkspace\HttpUnitMitGoogle
ant compile
set httpunit=D:/MeinWorkspace/HttpUnitMitGoogle/httpunit-1.7
java -cp ./bin;%httpunit%/lib/httpunit.jar;%httpunit%/jars/js-1.6R5.jar;%httpunit%/jars/junit-3.8.1.jar;%httpunit%/jars/nekohtml-0.9.5.jar;%httpunit%/jars/xercesImpl-2.6.1.jar;%httpunit%/jars/xmlParserAPIs-2.6.1.jar junit.swingui.TestRunner meinpackage.HttpUnitMitGoogle
(Passen Sie die Pfade an.)
Dieser Testlaufaufruf zeigt die 'System.out.println()'-Komentare im Kommandozeilenfenster und das JUnit-Testergebniss im Grafikmodus.
Sie können das Projekt auch in Eclipse importieren.
Legen Sie dazu die beiden oben aufgeführten Dateien 'HttpUnitMitGoogle.java' und 'build.xml' in den oben genannten Pfaden an.
Wählen Sie in Eclipse: 'File' | 'New ' | 'Java Project', schalten Sie um auf 'Create project from existing source' und wählen Sie über 'Browse...' als 'Directory' Ihr Projektverzeichnis, zum Beispiel D:\MeinWorkspace\HttpUnitMitGoogle und als 'Project name' HttpUnitMitGoogle.
Klicken Sie im 'Package Explorer' auf die '[+]'-Zeichen vor 'HttpUnitMitGoogle' | 'src' | 'meinpackage',
öffnen Sie 'HttpUnitMitGoogle.java' durch Doppelklick und wählen Sie 'Run' | 'Run As' | 'Java Application'.
Die Meldung "Error exist in required project(s)" können Sie mit 'Proceed' ignorieren
(sie bezieht sich z.B. auf die anderen HttpUnit-Examples).
Im 'Console'-Fenster können Sie die Programmausgaben verfolgen.
Öffnen Sie wieder 'HttpUnitMitGoogle.java', aber wählen Sie diesmal 'Run' | 'Run As' | 'JUnit Test'. Jetzt öffnet sich die 'JUnit'-View und nach kurzer Zeit erscheint unter dem 'JUnit'-Tabulatorreiter (hoffentlich) der grüne JUnit-Balken.