Jenkins勉強会 第2回 Jenkins meets Selenium WebDriver

こんばんは。お盆で姪を持ち上げすぎて筋肉痛になる担当のイッペイです。

本日は、8月29日に宜野湾ベイサイド情報センター Gwaveにて行われたJenkins勉強会に参加してきたため、メモ&イベントレポート

その前にやや乱暴に概要を。
(勉強会での説明ではなくて、個人的な理解です。)
 
Jenkinsの概要
jenkins_logo

Jenkinsとは、ソースコードのビルドやコンパイル、テスト自動化できるツールで、
一度設定してしまえば、継続的に同じ手順を繰り返してくれるため、人手を節約することができます。
単純作業を少なく、よりクリエイティブな作業に集中することを目指しています。

ちょっとITのエンジニアでない人には具体的イメージを説明しずらいのですが、
インスタントラーメンの開発をしているとして、サンプルのラーメンとかやくを開発した後、試食するするためにお椀に麺を入れたり、お湯を沸かして注いだりしないといけない・・・そんな状況を、麺とかやくのサンプルを作った後、指定の場所に置いておけば執事ロボットが勝手にラーメンを作ってくれるし、大雑把にうまいか不味いかも教えてくれる・・・としたら便利ですよね!そんな感じ。
 
 
Seleniumの概要
selenium-logo

これは、人がブラウザを操作してWebサイトやアプリケーションを操作するのをシミュレートして、テストしてしまおう。
というツールです。実際に操作したのを記録して再生することも出来るし、プログラムを書いてブラウザを操作して貰うこともできます。
 
JenkinsとSeleniumの連携は執事ロボットにブラウザ操作して貰って、サイトが壊れてないか試して貰う感じ。
 
 
前回の第1回では概要と、Jenkinsのインストールまでのハンズオンが中心でしたが、
その後のブレストにて、今後勉強会で取り組みたい事柄について、Seleniumを用いて出来ると思われることが多かったため
第2回はSeleniumと予告されていました。
スピーカーは第1回、2回ともに株式会社レキサスの西さん。

勉強会はハンズオン形式で行われ、それぞれの環境でハマりつつも、
皆さん適宜、情報共有して解決していっておりました。
ハンズオンにて行った内容としては主に以下
 
 
1.Selenium Builder ハンズオン
・Firefoxのアドオンを利用し、画面操作でテストを記録できる
・記録したテストを実行できる(自動でブラウザが画面操作される)
・記録したテストをコードとしてエクスポートできる

2.Selenium WebDriver + Java サンプルコード作成
・Selenium Builderからエクスポートしたコードを手直しして、テストコードを記述
・ハンズオンではIDEにEclipseを使用
・Googleで犬の画像を検索してきて保存するテストコードを実行

3.【Jenkins】Java + Selenium WebDriver 自動テスト環境構築
・JenkinsとSeleniumを連携し、自動でテスト
・GitHubやBacklogのリポジトリにJavaのテストコードを置いてJenkinsがジョブ実行時に取得
・CUIのみのサーバ環境の場合はXvfbを利用し、X Window System の画面入出力をシミュレート
 
 
私の状況としては、事前にSeleniumのオライリー本を入手していたのですが、
時間の都合でパラパラ読み飛ばすのみで実践できていなかったため、Selenium初体験。

初めてだったこともあり、Selenium Builderのアドオンでの自動記録、実行の時点で感激。
これはお手軽。Selenium Builderはエンジニアでなくても利用できそうです。
企業のWeb担当で頻繁に改修分の検収が発生するとか・・・そういうシーンで小さな革命が起きそうです。

また、エクスポートしたコードは割と読みやすい印象を受けました。
Excelでマクロ記録した時に見るVBAのような感じでしょうか。
もうちょっと、自動記録は人間が読めないコードを出してくると想像していましたが・・。

Javaのサンプルコード作成では実行にこぎつけるために、周囲の方の解決方法を真似たりアドバイスを頂き、
エラーを解決するので精一杯でしたが、これなら記録したコードを編集してよりテストらしくすることもできそうだという感触を掴みました。

そしていよいよ、Jenkinsとの連携・・・と、ここで私の準備したJenkinsがトラブル。
JenkinsからGitコマンドを実行し、BacklogのGitリポジトリからJavaコードを取得する過程でエラー。
GitのパスをJenkinsに直接指定すると解決したところから察するに、パスが通っていなかったのが原因だったようです。
別のジョブ(今回の勉強会と関係ないジョブ)は正常動作していただけに、ワークスペースのパーミッションが原因かと勘ぐってハマりました。
なんのタイミングでGitへのパスが正しく通らなくなったのかは未だにはっきりしていませんが、Jenkinsが落としてきたコードのテストをしようとするところまでは到達しました。
解決に向けて色々とアドバイス頂いたスピーカーの西さんと周囲の方に感謝です。
 
 
 
さて、今後自社のWebサービスでユーザーの動向を見ながら受託開発以上に激しく改修を繰り返すことになると思います。
改修の数が増えるほどにテストや動作確認の工数が増えるか、トラブルも増えて行きます。
Jenkins等CIツールを用いた継続的インテグレーションに取り組むことは、人員リソースが限られた中でWebサービスを成功に導く鍵になるかもしれません。
何でも解決してくれる”銀の弾丸”はありませんが、調査・学習コストに見合う効果がありそうだという感触を今回の勉強会で受けました。

また、サンネットではサーバサイドはPHPが主流ですので、定着のためにもFacebook社が開発した”php-webdriver”にもチャレンジしてみたいです。

CentOS7上のJenkinsからPhing経由でPHPUnitを実行し、コード内部でSelenium2(php-webdriver)を呼び出し、Xvfbにてシミュレート、結果をJenkinsがメール送信・・・という流れでしょうか・・・
ちょっとまとまった時間が無いと厳しいかもしれませんが、サーバ周りの経験値を上げるのも兼ねてちょくちょく取り組んでいきたいと思います。

   
サンネット株式会社
〒901-2101
TEL098-870-0670/FAX098-870-0671