Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

HttpUnitを利用したWeb画面テストの自動化

WebブラウザのUIテストを自動で行い省力化する

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/11/01 00:00

テスティングフレームワーク「xUnit」を利用した開発が普及しつつありますが、xUnitは基本的にモジュール単位でのテストを行うもので、ブラウザ上のHTMLを評価できません。そこで本稿では、HttpUnitというツールとJUnitを組み合わせて、Webブラウザ上のテストを自動化する方法を紹介します。

目次

はじめに

 テスティングフレームワーク「xUnit」を利用した開発が普及しつつある昨今ですが、Webブラウザをユーザーインターフェイスとするシステムでは、当然の事ながら画面のテストも必要となります。

 xUnitは、基本的にモジュール単位でのテストを行うものであり、ブラウザ上のHTMLを評価する事はできません。

 そこで本稿では、「HttpUnit」というブラウザをエミュレートするツールを使用して、Webアプリケーション画面のテストを行う方法を紹介します。

対象読者

 Webアプリケーション画面開発者、画面テスト担当者。

 なお、本稿のプログラムはJavaで記述するため、HTMLに関する知識の他に、JavaとJUnitの知識が必要です。しかし、プログラム自体はクライアント側にて単体で動作するため、サーバー側のシステムはJavaである必要はありません。

参考
 CodeZineでCactusについての有益な記事がありますが、Cactus単独ではできなかったHTML構造の評価を、HttpUnitのWebResponseを使用することで可能となります。
 詳しくはCactusのドキュメントで、[Writing Tests]-[integrating HttpUnit]を参照してください。
 

必要な環境

 HttpUnitの動作に最低限必要なものは次のとおりです(※あくまで本記事の動作に必要十分なものです)。なお、HttpUnitのアーカイブには、各種jarファイル(下記以外も含め)一式が入っています。

 また今回、SDKに「J2SE SDK 1.4.2_09」、Webアプリケーションサーバーに「jakarta-tomcat-5.0.28」を利用しました。

システムの動作シナリオ

 下記のような流れの、非常に単純なログイン機能を想定してみます。

  1. ログイン画面を起動
  2. ログインID、パスワードを入力
  3. ログイン処理実行
  4. 処理結果に応じて画面遷移を行う
     
    • エラーであればログイン画面を再表示する
    • 問題なければ、ログイン完了画面へ遷移する

各画面の外部仕様

ログイン画面

 入力項目は「ログインID」と「パスワード」の2項目です。

図1.1 ログイン画面の要素
図1.1 ログイン画面の要素

 [ログイン]ボタンの押下によりサーバーへデータを送信し、ログイン処理を実行します。入力値に誤りがあった場合は、画面上部にエラーメッセージを表示して再度入力するよう促します。

図1.2 ログインIDの誤り
図1.2 ログインIDの誤り
図1.3 パスワードの誤り
図1.3 パスワードの誤り

ログイン完了画面

 画面上部にログインが完了した旨のメッセージを表示します。また、ログインを行ったユーザーに関する情報も表示します。

図1.4 ログインの成功
図1.4 ログインの成功

各画面の内部仕様

端末識別

 サーバーへリクエストを送信する際、「端末ID」をリクエストヘッダーに付加できるものとします。PCのブラウザではあまり聞かない言葉ですが、携帯端末向けサイトでの機種判定などに使用されます。

 ヘッダフィールド名は「X-CZ-TID」とし、チェック仕様は次のようにします。

  • 端末IDが未指定: OK
  • 端末IDが「TCZ001」: OK
  • 端末IDが「TCZ001」以外: エラー

画面識別

 また、「画面ID」というものを設けて、レスポンスヘッダに出力するようにします。これにより、どの画面に遷移しているかを識別します。

 ヘッダフィールド名は「X-CZ-SID」とし、ログイン画面が「SCZ001」、ログイン完了画面が「SCZ002」と定義します。

 上記の両IDとも、わざわざHTTPヘッダに設定する必要はなく、HTML内に記述してよいのですが、今回はヘッダ部のテストコード記述のために、あえてそうしています。

メッセージ

 ログイン処理の結果コードに応じて、次のように定義します。

結果コード一覧
結果コード メッセージテキスト
0 ログインが成功しました
1 不正な端末からのアクセスです
2 存在しないIDです
3 パスワードが誤っています

環境構築(サーバー)

 ここではTomcatを用いますが、HttpUnitはサーバー環境に依存しないため、PHPやASPなどの言語によるアプリケーションサーバーであっても問題はありません。

webapp名 httpunitapp
ログイン画面jsp login.jsp
ログイン完了画面jsp loginComlete.jsp
ログイン処理サーブレットクラス jp.co.rooch.misc.httpunit.servlet.Login
ログイン処理サーブレットURL /servlet/Login
サーブレット定義について(「web.xml」から抜粋)
<servlet>
  <servlet-name>Login</servlet-name>
  <servlet-class>jp.co.rooch.misc.httpunit.servlet.Login</servlet-class>
</servlet>

 <servlet-mapping>
  <servlet-name>Login</servlet-name>
  <url-pattern>/servlet/Login</url-pattern>
</servlet-mapping>

環境構築(クライアント)

 HttpUnitを使用できる環境を構築します。「必要な環境」で先述したjarファイルにクラスパスを通したうえで、コンパイルと実行を行います。

 ここではEclipseを利用し、次のようなプロジェクト構成としました。

プロジェクト構成
プロジェクト Javaプロジェクト
プロジェクト名 httpunitclient
ライブラリ 「lib」ディレクトリを「httpunitclient」ディレクトリ直下に作成し、
先のjarファイルを配置。
Javaのビルドパス 「ライブラリー」にて上記「lib」のjarをすべて追加。
テストクラス JUnitテスト・ケースの追加にて「LoginTest.java」を記述。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 鈴木 等(スズキ ヒトシ)

    ルークシステムズ代表。コードの重要性を認識しつつ、効率と品質が両立出来る開発を目標に日夜業務に励んでいます。オープンソースツールを利用するだけでなく、自社開発ツール「SteadyForm」を活用して、テストドリブンな開発を推進していこうとしています。

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5