チーム全体にとって有用なテストを作成しようとすることから生じる頭痛を部分的に軽減する、より便利なアプリケーション、ライブラリ、およびプラグインがあります。 手元にある優れたツールの例は、継続的統合用のHudson 、統合テスト用のCucumber 、および実際のブラウザーでのWebアプリケーションの自動テスト用のSeleniumです。 しかし、これらすべてのコラボレーションを組織するには、ビルドサーバーでの設定と構成がますます必要になります。
私たちの目標は、Hudsonビルドサーバー上のSeleniumでスクリプトを使用して完全なCucumberテストスイートを実行する際に遭遇する障害を克服するために必要な手順を文書化することです。
成分
このトピックでは、次の成分を使用します。
- Debian 5.0.4 'Lenny'の1つのインストール
- 1 xvfbインストール
- 1 Webブラウザ(この場合、 iceweasel 、Debianブランド変更後のFirefox
- Ruby on Rails 2.3.7用の1つのアプリケーション(3.0.0で問題ないため、このバージョンは必要ありません-約翻訳者)
- 1宝石カピバラ0.3.8
- きゅうり(0.7.3)味わう
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の興味が明らかになったら、それがどのように行われるかを書きます。