コンソールキュウリとカピバラ、セレンとハドソン

今日、ソフトウェア開発者はお気に入りのテストフレームワークなしでは生きていけません。 しかし、開発者が望まないのは、これらのテストを継続的に実行することです。 また、開発チームは、すべての人にテスト結果をもたらすために時間を無駄にしたくありません。



チーム全体にとって有用なテストを作成しようとすることから生じる頭痛を部分的に軽減する、より便利なアプリケーション、ライブラリ、およびプラグインがあります。 手元にある優れたツールの例は、継続的統合用のHudson 、統合テスト用のCucumber 、および実際のブラウザーでのWebアプリケーションの自動テスト用のSeleniumです。 しかし、これらすべてのコラボレーションを組織するには、ビルドサーバーでの設定と構成がますます必要になります。



私たちの目標は、Hudsonビルドサーバー上のSeleniumでスクリプトを使用して完全なCucumberテストスイートを実行する際に遭遇する障害を克服するために必要な手順を文書化することです。



成分



このトピックでは、次の成分を使用します。





Railsアプリケーションの作成、gemsのインストール、Cucumberスクリプトの開発の詳細については説明しません。 彼らは独自の美しいマニュアルを持っています。



必要なパッケージをインストールする





まず、グラフィカルモードなしでブラウザでテストを実行できるようにするパッケージをいくつかインストールします。



Xvfbを使用した仮想フレームバッファー




「X Window System、Xvfb、または仮想Xでは、フレームバッファーは画面に何も表示せずにメモリ内のすべての操作を実行するX11サーバーです」 -http://en.wikipedia.org/wiki/Xvfb



$ apt-get install xvfb







Webブラウザ




Xvfbをインストールしたら、先に進んでWebブラウザーをインストールできます。



$ apt-get install iceweasel







続行する前に、タブを閉じたりクラッシュから回復したりしないように、ブラウザープロファイルを構成する必要があります。 これが行われない場合、テストスイートは壊れるか、永久に動作します。



$ cd ~/.mozilla/firefox/xxxxxxxx.default/

$ vim user.js









ここで、user.jsファイルに2行入力します。



user_pref("browser.sessionstore.enabled", false);

user_pref("browser.sessionstore.resume_from_crash", false);









表示チェック




テストの実行を開始する前に、すべてのパッケージが正しくインストールされていることを確認します。 これを行うには、画面0のディスプレイ99で仮想フレームバッファー(Xvfbセッション)を実行します。



$ Xvfb :99 -ac -screen 0 1024x768x16









別のターミナルウィンドウで、次のように記述します。



$ DISPLAY=:99.0 iceweasel example.org









これにより、仮想フレームバッファーでWebブラウザーが起動し、そのブラウザーでexample.comホームページが開きます。 次に、仮想フレームバッファ内で何が起こっているかを確認できるように、「スクリーンショット」を撮る必要があります。



$ xwd -root -display :99.0 -out xwdout









次のスクリーンショットをご覧ください:

$ xwud -in xwdout









(そして、リモートマシンをセットアップしている場合は、xwdoutファイルを自分用に取得して、自分自身を見ることができます-約翻訳者)

example.orgのメインページを参照してください。 Xvfbとiceweaselが正常にインストールされ、いくつかのテストを実施する準備が整いました。

画像



キュウリの実行





このセットアップを継続的統合環境に統合する前に、テスト実行を実行して、キュウリが新しい構成で機能するかどうかを確認します。 次のコマンドでこれを行うことができますが、キュウリに仮想フレームバッファーディスプレイを使用するように明示的に指示する必要があることに注意してください。



$ DISPLAY=:99.0 rake cucumber









すべてがうまくいけば、すべてのスクリプトが正常に完了したことがわかります。 すべてのシナリオが成功しない場合は、まず、通常のグラフィックモードの状況ですべてが正常かどうかを確認してください。



ハドソン構成





今、私たちはこのすべてのゴミで離陸しようとするポイントに来ました。 バックグラウンドキュウリを開始する新しいビルドステップをタスクに追加する必要があります。 ただし、アセンブリ手順を追加する前に、仮想フレームバッファーの開始スクリプトを作成します。 このスクリプトを使用して、スクリプトを実行する前にバッファーを開始し、スクリプトの終了後にバッファーを停止できます。 このスクリプトは/etc/init.d/に保存できます。 Hudsonを実行しているユーザーが実行できるように、アクセス許可が設定されていることを確認してください。



XVFB=/usr/bin/Xvfb

XVFBARGS="$DISPLAY -ac -screen 0 1024x768x16"

PIDFILE=/var/hudson/xvfb_${DISPLAY:1}.pid

case "$1" in

start)

echo -n "Starting virtual X frame buffer: Xvfb"

/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS

echo "."

;;

stop)

echo -n "Stopping virtual X frame buffer: Xvfb"

/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE

echo "."

;;

restart)

$0 stop

$0 start

;;

*)

echo "Usage: /etc/init.d/xvfb {start|stop|restart}"

exit 1

esac

exit 0









最後のステップは、「シェルの実行」タイプのアセンブリステップをHudsonタスクに追加することです。 次の一連のコマンドを使用して、キュウリを起動できます。



#!/bin/bash

export DISPLAY=:99

/etc/init.d/xvfb start

rake cucumber

RESULT=$?

/etc/init.d/xvfb stop

exit $RESULT









このビルドステップを追加した後、タスクを保存し、Hudsonにビルドさせます。 すべてがうまくいけば、キュウリスクリプトは継続的な統合プロセスの一部として機能するようになります。 Hudsonのアセンブリのコンソール出力ページを見て、失敗したアセンブリの理由を見つけることができます。



おわりに





このトピックでこの場所にたどり着いた場合は、バックグラウンドでインストールできます。 このインストールの利点は、非常に軽量で構成が簡単なことです。 ただし、複数の異なるブラウザーでテストする必要がある場合、この設定は適していません。 このセットアップでは、仮想マシンとHudsonの下位エージェントに目を向ける必要があります。



UPD:「テスト」に移行しました。もしhabrasocietyの興味が明らかになったら、それがどのように行われるかを書きます。



All Articles