Hudson 上でテストを動かそうとしてつまずいた点
テスト環境構築のために、Hudson × Ant × JUnit with Selenium の組み合わせで動かそうとしたら、いろいろと四苦八苦してしまいました…。
JUnit タスクが動かない
なぜか、Ant の JUnitタスクを動かそうとしたら ClassNotFoundException がでました。
不思議なことに、Hudson の設定で「Javaオプション」にクラスパスを追加しても動かなかったです*1。
いろいろググったら、クラスパスは Javaオプション欄ではなく、ターゲット欄に「-lib」として設定するのが正しいそうです。
参考:continuous integration - Pass a command line argument to Ant in Hudson - Stack Overflow
どうやら、Javaオプションに設定しても、JUnit タスクで新たに立ち上がるにプロセスには引き継がれず、エラーになるようです。
eclipse 上では意識せずに動いていたので、気づくのに時間がかかりました・・・。
psql(PotgreSQL管理ツール)が動かない
以下のような、psql で初期化SQLを実行する Ant を書いたところ、Hudson 上では動きませんでした。
なぜか、psql が起動したところでピタッと止まり、ログレベルを上げても何も出ない状態に・・・。
<exec executable="${psql.path}/bin/psql.exe"> <arg value="-f" /> <arg file="${initialize.sql}" /> <arg value="${db.name}" /> <!-- データベース名 --> <arg value="${db.user}" /> <!-- ユーザ名 --> </exec>
これの原因は、パスワードの入力待ちでした。
なので、パスワードを環境変数に追加して解決*2。
<env key="PGPASSWORD" value="${db.pass}" /> <!-- パスワード -->
ただ、ローカルからのアクセスならパスワードを聞かないように設定してあったので、これは本来不要なはず(現に、eclipse 上では何事もなく動いた)。
Hudson をサービスとして動かしていたからだとは思うんですが・・・詳細はわからずじまいです。
Seleniumが動かない
psql の問題と同様に、Selenium を含んだテストに差し掛かるとピタッと止まりました・・・。
どうやらIEの起動に成功しているものの、表示がされないという状態になったみたいです。
なんとなく、Hudson をサービスで起動してるから?と思ったら・・・ビンゴ。
HudsonからSeleniumのテストを実行する場合、HudsonがWindowsのサービスから起動されていると(Tomcatのサービスにディプロイしている)IEの起動に失敗します。当然という気もしますが。
HudsonからSeleniumを実行する - azuki note
ただ、解決策があるそうです。
しかし、Hudsonのサービスを実行するアカウントをローカルシステムアカウントにして「デスクトップとの対話をサービスに許可」にチェックを入れておけば、IEも起動できてテストを実行することができました。サービスとして実行しているSlaveもOKでした。
Windowsサービスとして動作するHudsonからSeleniumのテストを実行する - azuki note
結局・・・
最終的に、無事テストができる段階までこぎつけました。
eclipse 上ではなんなく動いていたんで、こんなに引っかかるとは思っていませんでした。
でも、動き出してしまえば後は設定いらず、楽にテストができそうです。