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.
Weitere ähnliche Programmierbeispiele finden Sie unter Integrationstest mit HtmlUnit und HttpUnit und HTML-Akzeptanztest mit Fit.
Legen Sie ein Projektverzeichnis an (z.B. \MeinWorkspace\HttpUnitMitGoogle), darunter die Verzeichnisse lib und src, und unter letzterem meinpackage:
[\MeinWorkspace\HttpUnitMitGoogle]
|- [lib]
'- [src]
'- [meinpackage]
Speichern Sie im Unterverzeichnis src\meinpackage die folgende HttpUnit-Testklasse: GoogleHttpUnitTest.java
package meinpackage;
import com.meterware.httpunit.*;
import junit.framework.*;
public class GoogleHttpUnitTest 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( GoogleHttpUnitTest.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.
Öffnen Sie ein Kommandozeilenfenster und geben Sie folgende Kommandos ein:
cd \MeinWorkspace\HttpUnitMitGoogle
rd bin /S /Q
md bin
javac -cp bin;lib/* -d bin src/meinpackage/*.java
java -cp bin;lib/* meinpackage.GoogleHttpUnitTest
Sie erhalten eine Liste, die einige der von Google gefundenen Links zeigt.