はい。ひさびさとかそういうレベルではない。仕事ばっかりしている。
さてさて、ここ最近何かの反動でテスティングにハマっております。なんか定期的に波が来ますね。テストの。
SeleniumとかFEST-Swingとか、UI的な部分をテストすることによって精神の平穏を得るということをやっているわけですが、やっぱりJenkinsでもこの手のテストを定期的に走らせて、「Jud. Jud.」とか満足気な顔をしたいわけです。精神の平穏を得るために。
Xvfbを試してみる
で、FESTの記事でRunning FEST under Xvfbみたいな割とそのまんまの記事があったので試してみたわけです。
そうすると、こんな感じの例外が。
org.fest.swing.exception.ActionFailedException: Focus change to javax.swing.うんぬんかんぬん
どうも、コンポーネントにフォーカスを設定しようとしているのだけど、hasFocus()がなかなかtrueになってくれなくて怒る。ということらしい。
ググるとWindow Managerに変更を加えることによってうまく行っている人がいる。自分も色々試行錯誤して、x11vncでXvfbで作ったdisplayにアクセスしてあげると、その間にJenkins上で走ったテストは上の例外が発生しないということまではわかった。糸口としては掴めた気がするのだけどなんか時間を食いそうな気がする(勉強しなくてはならなさそうだけど、ここではそこまで時間を使いたくない)ということで別の簡単な方向がないか探ることに。
Xvnc Pluginでがんばる
いろいろと探ってみるとXvnc Pluginなるものが。なんだよー居たなら居るってはじめから言えよー。ハハッ。
試してみたらうまくいったので、以下インストールメモ。自分用。
以下Debianで作業している。まず、vncserverとwindow managerを適当にインストール(もっとコンパクトにできるかも?)
# apt-get install vnc4server
# apt-get install gnome-session
apt-get installするときに設定を聞かれる。とりあえずdefaultを指示しておく。
次に、一度vncserverを起動しておいてあげる。Jenkinsの実行ユーザで行なっておくこと。(homeに.vncなるディレクトリができる。)
vncserverは初回起動時にパスワードを聞いてくるのだけど、Jenkinsから呼ばれるタイミングでこのパスワードの問い合わせが起きるとエラー終了してしまうということらしい。
# su - jenkins
$ vncserver :1
適当なパスワードを入力(なんでもよい)
$ vncserver -kill :1
これでvncserverの準備はOK。次、JenkinsのWebインタフェースを開いて、Xvncプラグインをインストールしてあげる。
(1)[Jenkinsの管理] - [プラグインの管理]をクリック
(2)[利用可能]タブをクリック
(3)Xvnc Pluginにチェック
(4)[再起動せずにインストール]を選択
これでXvnc Pluginがインストールされる。Jenkinsのプラグイン機構は簡単ですなあ。
最後にXvnc Pluginにvncserverのコマンドの呼び方を教えてあげる。こんな感じ:
(5)[Jenkinsの管理] - [システムの設定]をクリック
(6)Xvncの項目を探し、[Command line]に、
vncserver :$DISPLAY_NUMBER -geometry 800x600
などと書く。($DISPLAY_NUMBERが、実行時に適当なディスプレイ番号に置き換えられるという仕掛けらしい)
(7)[保存]ボタンを押す
これで、Jenkinsに、Xvncを使うということと、vncserverの呼び方を教えてあげたことになる。Jenkins全体の設定はこれで終了。
あとは、各プロジェクトの設定に[Run Xvnc during build]なる項目が現れるので、FEST-Swingなどを使うプロジェクトの場合はこれをチェックしてあげる。
これで、GUIを使うようなテストもきちんと走ってくれます。またひとつ平穏な生活に近づきましたね。(誤認)