Parasoft Jtest 8.x JtestによるWebアプリケーションの

Parasoft Jtest 8.x
JtestによるWebアプリケーションのテスト
Parasoft Webkingとの連携
テクマトリックス株式会社
Webアプリケーションのテスト
Webアプリケーションに対する単体テストを実施する場合、通常コンテナの外部でテストが実行され
るため、コンテナ上で生成されるインスタンスやアプリケーションが使用する様々なリソースがテス
ト環境に存在しないことにより複雑化します。これらのローカルの環境では生成されないインスタン
スやリソースへの接続に対して、スタブやMockなどを用意しJUnitのテストケースを作成してテスト
を実行することは可能です。Jtestが自動生成するテストケースにおいても、ローカル環境では生成
されないインスタンスに対してスタブオブジェクトを用意し、呼び出しが行えないメソッドはスタブ
メソッドを追加してテストケースを生成し実行できます。このようなテストはコードロジックに対す
る単体テストの場合であれば有効なテストとなりますが、コンテナはトランザクションからセキュリ
ティ、ライフサイクル、パーシステンス、インターフェイスに至るまで、さまざまなリソースに依存
します。通常コンテナがない環境では現実的なコードの動作をテストすることは困難です。コンテナ
と相互に連携した状態でテストを実行することが必要となります。
Webアプリケーションをより現実の環境に近い状態でテストするための方法として、Webアプリケーシ
ョン用のテストフレームワークであるCactusの使用が考えられます。Cactusを使用した場合、ローカ
ル環境で呼び出されたテストケースはテストフレームワークに含まれるCactusリダイレクタプロキシ
を介して、アプリケーションの実行環境であるコンテナ上で実行されます。そのため、ローカル環境
でのテストで用意する必要があるスタブやMockなどの作成を大幅に軽減することができ、デプロイさ
れたJava EEコード(( EJB、サーブレット、JSP、Struts Action クラス、Spring クラス、taglib、
およびサーブレット フィルタ))に対して統合単体テストが可能になります。ただし、通常のJUnit
を利用したテストに比べ、サーバの準備、Cactusのインストールや設定作業、またCactusベースのテ
ストケースの作成などテストの準備作業の工数を考慮しなければなりません。
インコンテナテスト
Jtest8.0から追加されたインコンテナテストでは、デプロイされた Webアプリケーションに対して
Cactus テスト ケースを自動生成することができます。テストの準備はJtest(Eclipse)へのサーバ
の追加とテスト対象プロジェクトの登録のみです。Cactusを実行するための細かい設定を行う必要は
ありません。準備が整った後は、Jtestでテストしたいクラスを選択しテストを実行することにより、
Cactusベースのテストケースが生成されたあと、自動的にデプロイされテストが実行されます。アプ
リケーションの開発中に、開発者は自分のデスクトップのローカルなアプリケーション サーバでテ
ストを容易に実行できます。このため、本来であれば QA、デプロイ、実稼動の段階まで発見されな
いようなアプリケーションの欠陥を、修正が容易な開発段階のうちに早期発見できます。開発サイク
ルの後期では、アプリケーション サーバで同じテストを実行して実稼動環境でもコードが正しく機
能するかどうかを検証できます。
また、インコンテナテストでは、Cactus以外にもHTTPUnitなどのJUnitベースのテストケースを実行
することができます。これらのテストを Jtest で実行することには次の利点があります。
z
z
z
Java のテスト実行をまとめて 1つのツールで管理できる。
結果を Jtest GUI、Jtest レポート、および GRS レポートにまとめることができる。
サーバ サイド カバレッジを追跡し確認できる。
Webking による HTTPUnit テストケースの生成
HTTPUnitは、ブラウザの動作をエミュレートするためのライブラリです。クライアントサイドのHTML
ページ情報を取得したり、テスト対象アプリケーションへリクエストを発行するためのさまざまな
APIが用意されています。HTTPUnitでテストを実行する場合、これらのAPIを使用してユーザの操作の
流れ(クリックパス)をJavaコードで記述していく必要があります。このテストケースを生成するた
めのいくつかのツールが存在していますが、ここではParasoft Webkingを紹介します。
1
Parasoft WebkingはWebアプリケーション用の機能テストツールです。ユーザのクリックパスを記録
し、そのパスに対して様々な入力値を用いたテストを実行したり、回帰テストを実施し常に同じレス
ポンスが得られているかをテストすることができます。これ以外に各ページに対し静的解析(ページ
に含まれるHTMLやJavaScriptなどのコーディング規約のチェック、リンク切れ等)や負荷テストを実
施できます。機能テストで使用されるパスは、ブラウザを利用して記録することができ、記録された
パスはツリー構造で管理されるためパスの作成のためにコードを記述する必要はありません。また、
回帰テスト用に各ページの要素に対して検証用の設定(表示されている値、イメージのサイズなど)
を行うこともできますが、Webkingでは基準となるレスポンスを記録した回帰コントロールを作成す
ることができるため、常に同じユーザ操作によって同じ結果が得られているかを確認することができ
ます。
[Webkingのパス]
Webkingではテストに使用するパスからHTTPUnitテストケースを生成することができます。Webkingが
生成するHTTPUnitのテストケースでは、ページのナビゲーション以外にもあらかじめ指定されたペー
ジ要素に対するアサーションコードを自動生成する他、Webkingが提供するAPIを利用することにより、
HTTPUnitでのテスト実行時にブラウザで結果を確認しながらテストを実行させたり、テストクラスを
テストとナビゲーションに分けて管理したりすることができます。
[テストケース生成ウィザード]
2
[生成されたテストケースのイメージ]
3
Webkingで機能テストを実施している場合、機能テスト後にコードの修正を行う必要が発生した際に
は、機能テストで使用されたWebkingのパスからHTTPUnitテストケースを生成し、Jtest(Eclipse)
上から実施することで、修正したコードに対する回帰テストを他のテストとあわせてその場で実施す
ることができます。
サーバサイドカバレッジの利用
Jtest で HTTPUnit テストケースを実行する利点としては Java のテスト実行をまとめて管理できる以
外に、サーバサイドカバレッジの追跡が可能になる点が挙げられます。コードの修正に伴い、サーバ
上で問題が発生した場合、開発者、またはテスタが手動で行う機能テストではサーバからのレスポン
スの結果しか得られません。そのため、HTTP レスポンスコードやサーバログなどをチェックしたり、
デバッグコードを追加したりすることによって問題の発生箇所を特定しなければなりません。Jtest で
サーバサイドカバレッジを追跡することによって、問題箇所の特定が容易になります。
Jtest を使用してカバレッジの取得を行うためには、あらかじめカバレッジをモニタするためのオプシ
ョンを追加してアプリケーションサーバを起動しておく必要があります。あとはサーバサイドカバレ
ッジを取得するオプションを有効にしたテストコンフィギュレーションを使用してテストを実行しま
す。
[テストコンフィギュレーション画面]
この結果、テスト中にカバーされた箇所をエディタ上で確認することができ、問題の原因の特定を容
易することができます。現在、様々な Web アプリケーション用のテストツールが提供されています
が、Parasoft Jtest と Webking とを連携して使用することにより、単体テストから機能テストにわた
って、より広範囲なテストを効率的に実施することができます。
4
5
【お問い合わせ先】
テクマトリックス(株)
システムエンジニアリング事業部
ソフトウェアエンジニアリング営業部
ソフトウェアエンジニアリング営業課
TEL 03-5792-8606 FAX 03-5792-8706
E-MAIL [email protected]
URL http://www.techmatrix.co.jp/products/quality/jtest/