オープンソースコラム


サンプルから学ぶHttpUnitの使い方

2008/05/08 16:51Update
TAGS: HttpUnit | 使い方 | サンプル

Syboos.jp編集長

サンプルからWEBアプリケーションテストフレームワークHttpUnitの使い方を学びます。

HttpUnitの概要及びそのインストール方法などについて次の記事をご覧ください:
HttpUnit - WebブラウザなしでWEBアプリケーションをテストするフレームワーク
WEBアプリケーションテストフレームワークHttpUnitのインストール及びHttpUnit基本

本文は、サンプルからHttpUnitの使い方について学びたいと思います。
1、HttpUnitにおいてプロキシの設定方法
2、HttpUnitにおいてJavascriptを無効にする方法
3、Getメソッドでサーバへリクエストの発行方法
4、Postメソッドでサーバへリクエスト(サブミット)の発行方法
5、Form送信方法
6、リンククリック
7、テーブルデータ及びその他部品の処理
8、サーブレットのテスト方法

サンプル
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import junit.framework.TestCase;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HttpUnitOptions;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.SubmitButton;
import com.meterware.httpunit.WebApplet;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebForm;
import com.meterware.httpunit.WebImage;
import com.meterware.httpunit.WebLink;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.httpunit.WebTable;
import com.meterware.servletunit.InvocationContext;
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;

public class HttpUnitTest extends TestCase {
    private static final String URL = "http://www.syboos.jp/";
    WebConversation wc = new WebConversation();
    
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        
        //wc.setProxyServer("proxy.server.name", 8080);
        
        //Javascriptを無効にする
        //HttpUnitOptions.setScriptingEnabled(false);
        //JavaScriptエラーを無視する
        HttpUnitOptions.setExceptionsThrownOnScriptError(false);
    }

    public void testFirst() throws Exception {
        WebResponse wr = wc.getResponse(URL);
        System.out.println(wr.getText());
    }
    
    //Getメソッドでサーバへリクエスト
    public void testGetMethodWebRequest() throws Exception {
        //リクエスト
        WebRequest req = new GetMethodWebRequest(URL);
        //パラメータ設定
        req.setParameter("id", "hello");
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        assertEquals(200, res.getResponseCode());        
    }
    
    //Postメソッドでサーバへリクエスト
    public void testPostMethodWebRequest() throws Exception {
        //リクエスト
        WebRequest req = new PostMethodWebRequest(URL);
        //パラメータ設定
        req.setParameter("id", "hello");
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        assertEquals(200, res.getResponseCode());        
    }
    
    //Form送信(ボタン押下)
    public void testSubmitForm() throws Exception {
        //リクエスト(WEBページの取得)
        WebRequest req = new GetMethodWebRequest(URL);
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        //フォーム取得
        WebForm form = res.getFormWithName("formName");
        //フォーム設定(パラメータ)
        form.setCheckbox("rememberMe", true);
        form.setParameter("username", "ユニット太郎");
        
        //ボタンを押下
        SubmitButton btnLogin = form.getSubmitButton("btnLogin");
        res = form.submit(btnLogin);
        
        System.out.println(res.getText());        
    }
    
    //リンククリック
    public void testClickLink() throws Exception {
        //リクエスト(WEBページの取得)
        WebRequest req = new GetMethodWebRequest(URL);
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        //リンクの取得
        WebLink link = res.getLinkWith("ホーム");
        
        System.out.println(link.getURLString());
        
        //取得したリックをクリック
        res = link.click();
        
        System.out.println(res.getURL().toString());
    }
    
    //テーブル処理
    public void testWebTable() throws Exception {
        //リクエスト(WEBページの取得)
        WebRequest req = new GetMethodWebRequest(URL);
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        WebTable webTable = res.getTables()[0];
        
        String text = webTable.getTableCell(0, 0).getText();
        System.out.println(text);
    }
    
    //その他部品
    public void testWebElement() throws Exception {
        //リクエスト(WEBページの取得)
        WebRequest req = new GetMethodWebRequest(URL);
        
        //レスポンス
        WebResponse res = wc.getResponse(req);
        
        WebImage webImage = res.getImages()[0];
        System.out.println(webImage.getSource());
        
        WebApplet webApplet= res.getApplets()[0];
        if (webApplet != null) {
            System.out.println(webApplet.getClassName());
        }
        
        //...
    }
    
    //サーブレット
    public void testServletRunner() throws Exception {
        //仮のサーブレット・コンテナー環境をエミュレート
        ServletRunner sr = new ServletRunner();
        //実行するサーブレットを仮サーブレット・コンテナーに登録
        sr.registerServlet( "loginServlet", LoginServlet.class.getName() );
        
        //サーブレットをアクセスするためのクライアント
        ServletUnitClient sc = sr.newClient();

        //サーブレットをアクセス
        WebRequest req   = new GetMethodWebRequest( "http://localhost:8080/loginServlet" );
        
        //サーバレットのコンテキストは次のようなコードにより取得できます
//        InvocationContext ic = sc.newInvocation(req);
//        LoginServlet servlet = (LoginServlet)ic.getServlet();
//        HttpServletRequest httpServletRequest = ic.getRequest();
//        HttpServletResponse httpServletResponse = ic.getResponse();
        
        WebResponse res = sc.getResponse(req);
        
        System.out.println(res.getText());
    }
}


解説はソースの中に詳しく書いてありますので、そちらをご覧ください。

Sponsored Link