JenkinsにSelenium Html Reportをいれてみた。

PHPでプログラムを作るときに、どうしてもテストがブラウザテストに偏りがちになり、
classのテストコードを書いているだけではコードのテストカバー率が悪くなってきたので、Selenium とJenkinsを組み合わせて
自動ビルド(テスト)を行えるような仕組みを組んでみた。

PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料

5分で出来るJenkins導入

こちらを参考にJenkinsはyum で入れて、各種のプラグインを入れてみた。

で、Seleniumを調べると、Firefoxのプラグインとして導入できるSelenium IDEがあり、
ブラウザ上でクリックやテキストボックスに書いた文言とかを記録して、HTMLファイル形式やJavaなどの各言語に特化した形式に
出力してくれるらしい。(HTMLファイルはそのままマクロとして動く。)

Selenium IDEの詳しい説明は下記のサイトが分かりやすかった。
PHPUnit と Selenium RCで機能テストをやってみる

そして、Selenium RC もあって、これはIDEでつくったマクロや自分でPHPUnit形式に書いたテストコードから
実行してくれるっていうサーバ。(コマンドラインで単体起動も可能)これも上記のサイトが詳しいので割愛。
PHPだと、1.0系じゃないと動かないらしいけれど、うちはまず、HTML形式のマクロで試すので、最新の2.5を入れてみたけれど。

Jenkinsでテスト用のプロジェクトを作り、シェルの部分にselenium RCの起動コマンドとかマクロファイルの指定を
する。

これはこのサイトのお手本通りに。
[Testing]Selenium RCとSelenium IDEでWEBアプリのUIテストを簡単自動化

こんな感じでauth.phpというログイン処理のページをテストするマクロを起動。

java -jar /usr/local/sbin/selenium-server-standalone-2.5.0.jar 
-htmlSuite "*firefox" "http://www.test.com"
"/usr/www.test.com/test/pcdemo/auth.php.login.test.suite.html"
"/usr/www.test.com/test/pcdemo/result/auth.php.login.test.suite.result.html"

※後で記述する失敗がこれには含まれてます。

構文記載のやりかた以外に出て困ったのがまずはこのエラー。

12:30:16.571 WARN – Failed to start: SocketListener0@0.0.0.0:4444

どうやら、下記のようにサーバとして立ててしまったselenium-server と使用ポートがかちあった様子。

# java -jar /usr/local/sbin/selenium-server-standalone-2.5.0.jar

コマンドライン起動のほうに -port 5555 のオプションを付けて回避。

次に出たのはこれ。

INFO – Preparing Firefox profile… HTML suite exception seen: java.lang.RuntimeException: Timed out waiting for profile to be created! at

プロファイル?作らないといけないのかなと思ったら、仮想Xを作って、それでプロファイルを作っちゃえという話があった。

Getting Started with Selenium and Jenkins

# yum install xorg-x11-server-Xvfb.i686
# yum install xorg-x11-apps.i686
# yum list *imagemagick*  (インストール済み)
# yum list *firefox* (インストール済み)
# /usr/bin/Xvfb :5 -ac -screen 0 1024x768x8 &

これで仮想Xがたっている。上記のサイトでは、xclockを表示させて、スクリーンショットをとって、正常にスクリーンショットが
取れるかというテストまでやって証明している。さすが。

とりあえず、Jenkinsでのビルドを実行して、エラーが出なくなったのがこの状態。
Jenkinsのシェルに書いたもの。

export DISPLAY=:5.0;
java -jar /usr/local/sbin/selenium-server-standalone-2.5.0.jar 
-port 5555 
-htmlSuite "*firefox" "http://www.test.com"
"/usr/www.test.com/test/pcdemo/auth.php.login.test.suite.html"
"/usr/www.test.com/test/pcdemo/result/auth.php.login.test.suite.result.html"

で、そのサイトに書いてあった
Selenium HTML reportこのプラグインを入れてみることにした。

インストールは「Jenkinsの設定」→「プラグインの管理」→「利用可能」タブでCTRL+Fの検索。
(Git用のプラグインも同じように入れた。)

どこでSelenium HTML report を使うように設定するんだろうって思っていたら、
「ビルド後の処理」の部分だった。
Selenium HTML report

ここで、いろいろはまったけれど、このように設定すべきだったらしい

1./usr/local/sbin/selenium-server-standalone-2.5.0.jar の引数の最後で指定しているresultのHTMLを自分のworkspaceに出力。
2.「ビルド後の処理」で指定するディレクトリを自分のworkspaceにする。

Setting up Selenium server on a headless Jenkins CI build machine
ここでしっかりと書いてくれていた。

ビルドされたページに行くと「Selenium Html Report」の文字が。
これを見ると、Suite.htmlの内容なので、個々のテストケース.htmlはリンク先にあるみたい。

Jenkins selenium report

こんな感じの出力だった。

下のほうの日本語は文字化けしていたけれど、途中は大丈夫でしたし、出力の設定があるかもしれませんが、
とりあえずこんなものでした。

心配だったので、一つ一つ積み上げてみたものの、
例 18.4: Selenese/HTML ファイルのディレクトリをテストとして使用する

一番下に、PHPUnitでも、HTMLファイルをそのままマクロとして使うという例が載ってたので、
実際にはこちらでテストしたほうがすっきりするかも。コマンドラインとはいえ、毎回Serverを起動させるよりも
リソース的にやさしいと思うし。