JUnit+DbUnit+Selenium RCを使ったWebアプリケーションの自動化(1)

Tomcat+Struts製Webアプリケーションのテストを自動化したい。

テスト用のプロジェクトをチェックアウトして、適当なターゲットを実行すると、誰でも、再現可能なテストができるようになっていて欲しい。

【希望】
1. JUnit4。
2. 各テストメソッドの中で画面遷移のテストを行う。このボタンやリンクをクリックしたら、XXXに遷移して、YYYが表示される、等。
3. 併せてDBの内容のチェックも行う。
4. テストの中でDBのテーブルにデータの登録・更新・削除があった場合でも、テストが終わるとテスト開始前のものに戻っていること。ただしDBトランザクションロールバックでは実現しない(アプリの機能としてコミット・ロールバックが発生するため。つまり、コミット発生後にコミット前のデータに戻す必要がある)。
5. テスト用DBの作成・破棄、アプリケーション(サーブレットコンテナ)の起動・停止までantタスクで実装。
6. テスト用データ、期待値はExcel
7. 各テストメソッドのJavadocコメントを使ってテスト仕様書、テスト結果を自動で生成できるとベター。

【現実】
2→Selenium RCによって実現可能な目処はたった。テストコードはFirefoxSelenium 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の実現のための工数が高くつきそうだから、労力に見合わなそうなので、手動かな…。