Tomcat+Struts製Webアプリケーションのテストを自動化したい。
テスト用のプロジェクトをチェックアウトして、適当なターゲットを実行すると、誰でも、再現可能なテストができるようになっていて欲しい。
【希望】
1. JUnit4。
2. 各テストメソッドの中で画面遷移のテストを行う。このボタンやリンクをクリックしたら、XXXに遷移して、YYYが表示される、等。
3. 併せてDBの内容のチェックも行う。
4. テストの中でDBのテーブルにデータの登録・更新・削除があった場合でも、テストが終わるとテスト開始前のものに戻っていること。ただしDBトランザクションのロールバックでは実現しない(アプリの機能としてコミット・ロールバックが発生するため。つまり、コミット発生後にコミット前のデータに戻す必要がある)。
5. テスト用DBの作成・破棄、アプリケーション(サーブレットコンテナ)の起動・停止までantタスクで実装。
6. テスト用データ、期待値はExcel。
7. 各テストメソッドのJavadocコメントを使ってテスト仕様書、テスト結果を自動で生成できるとベター。
【現実】
2→Selenium RCによって実現可能な目処はたった。テストコードはFirefoxのSelenium IDEを使ってJUnit4(Selenium RC)でエクスポートする。
ただ、テストしたいアプリがフレームを使ってて、左にメニュー、右にメイン画面みたいな風になってるんだけど、左のメニューをクリック(selenium.click(xxx))するとウインドウ全体が変わってしまう問題あり。
追記:multiWindowオプションで対応できる?
3・4⇒DbUnitを使うとできそうだけど、自動採番されるIDとその参照とか、外部キー絡みでテーブルデータの削除順序を考慮しないとならない辺り、もう一工夫必要そう。
アプリの機能として登録(コミット)されたデータをもとに戻す方法も考えないとならない。
テストの最初にDatabaseOperation.CLEAN_INSERTして、最後にDatabaseOperation.DELETEでいいのかな…。テーブルも全消しじゃなく登録・更新・削除の発生するデータだけにしておく。
6⇒DbUnitとPOIの組み合わせて実現可。
7⇒手付かず
【ant】
- createdb: DB作成
- import-data: マスタデータのインポート(from Excel)
- deploy: テスト対象のアプリケーションを起動。
- test: テスト実行
この中だとdeployの実現のための工数が高くつきそうだから、労力に見合わなそうなので、手動かな…。