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.