はじめに
テスティングフレームワーク「xUnit」を利用した開発が普及しつつある昨今ですが、Webブラウザをユーザーインターフェイスとするシステムでは、当然の事ながら画面のテストも必要となります。
xUnitは、基本的にモジュール単位でのテストを行うものであり、ブラウザ上のHTMLを評価する事はできません。
そこで本稿では、「HttpUnit」というブラウザをエミュレートするツールを使用して、Webアプリケーション画面のテストを行う方法を紹介します。
対象読者
Webアプリケーション画面開発者、画面テスト担当者。
なお、本稿のプログラムはJavaで記述するため、HTMLに関する知識の他に、JavaとJUnitの知識が必要です。しかし、プログラム自体はクライアント側にて単体で動作するため、サーバー側のシステムはJavaである必要はありません。
詳しくはCactusのドキュメントで、[Writing Tests]-[integrating HttpUnit]を参照してください。
必要な環境
HttpUnitの動作に最低限必要なものは次のとおりです(※あくまで本記事の動作に必要十分なものです)。なお、HttpUnitのアーカイブには、各種jarファイル(下記以外も含め)一式が入っています。
- HttpUnit本体「httpunit.jar」
- HTMLパーサー「nekohtml.jar」(※編注:10/24時点ではリンク切れとなっていました)
- HTMLパーサー依存ライブラリ「xmlParserAPIs.jar」
- HTMLパーサー依存ライブラリ「xercesImpl.jar」
また今回、SDKに「J2SE SDK 1.4.2_09」、Webアプリケーションサーバーに「jakarta-tomcat-5.0.28」を利用しました。
システムの動作シナリオ
下記のような流れの、非常に単純なログイン機能を想定してみます。
- ログイン画面を起動
- ログインID、パスワードを入力
- ログイン処理実行
- 処理結果に応じて画面遷移を行う
- エラーであればログイン画面を再表示する
- 問題なければ、ログイン完了画面へ遷移する
各画面の外部仕様
ログイン画面
入力項目は「ログインID」と「パスワード」の2項目です。
[ログイン]ボタンの押下によりサーバーへデータを送信し、ログイン処理を実行します。入力値に誤りがあった場合は、画面上部にエラーメッセージを表示して再度入力するよう促します。
ログイン完了画面
画面上部にログインが完了した旨のメッセージを表示します。また、ログインを行ったユーザーに関する情報も表示します。
各画面の内部仕様
端末識別
サーバーへリクエストを送信する際、「端末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 |
<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」を記述。 |