このセクションでは、ブラウザーを開かずに Web シナリオを実行する方法、および Linux でこのモードを設定するための設定について説明します。
このセクションの内容:
ヘッドレス モードでの実行
SOAtest は、ブラウザーを表示しない "ヘッドレス モード" で Web シナリオを実行できます。
soatestcli を使用したコマンドライン モードでは、SOAtest はデフォルトでヘッドレス モードで Web シナリオを実行します。コマンドラインからヘッドレス モードで実行したくない場合は、 soatestcli コマンドに -browserTestsVisible オプションを使用します (詳細については、「コマンドラインからのテスト実行 (soatestcli)」を参照してください)。
次の操作を行います。
- シナリオのコンフィギュレーション パネルを開きます。
- [ブラウザー再生オプション] タブで、[ヘッドレス] オプションを選択します。
ヘッドレス モードでテストを実行することによって、ブラウザー ウィンドウの開閉を気にせずに作業できます。
Linux の設定
Linux でヘッドレス モードで Web シナリオを実行するために、 SOAtest は独自の隠し X ディスプレイを作成します。X サーバー、Xvfb を使用して、ディスプレイ ハードウェアを必要としない仮想フレーム バッファーを作成します。SOAtest は、 Linux のために Xvfb のコピーを含んでいます (Xvfb_Linux)。インストールされた Xvfb がある場合はそれが使用されます。次のパスが順番に検索されます。
/usr/bin/Xvfb
/usr/X11R6/bin/Xvfb /usr/X/bin/Xvfb
/usr/openwin/bin/Xvfb
使用しているディストリビューションに Xvfb がない場合は、SOAtest は自身の Xvfb のコピーを使用します。この場合、コマンドライン引数の形式で、いくつか設定が必要となることがあります。SOAtest の Xvfb を適切な引数でスタートするための設定について、以下で説明します。
Xvfb を開始できない場合、SOAtest は $DISPLAY システム環境変数に指定されたブラウザーをディスプレイ上で実行します。言い換えると、SOAtest の GUI からテストを開始した場合、ブラウザーが同じディスプレイ上に GUI として現れ、SOAtest は Xvfb から [コンソール] ビューに起動エラー メッセージを出力します。コマンドラインからテストを実行していて、かつ利用可能なディスプレイがない場合、SOAtest は Firefox を立ち上げることができません。そのため、すべての Web シナリオは失敗します。
SOAtest とは独立して動く Svfb の取得
SOAtest から呼び出されたときに Xvfb が動くようにするには、まず Xvfb が単体で動作するようにします。
(1) display :20 で Xvfb を起動する
:20 が利用できない場合は、異なる display 引数を使用します。
$ cd /path/to/soatest/plugins/com.parasoft.xtest.libs.web_[version]/root
$ ./Xvfb_Linux :20 -ac
エラー メッセージが表示された場合は、個々の X 関連ファイルの場所のコマンドライン引数を指定する必要があります。ファイルの場所は、お使いのディストリビューションによって異なります。Fedora Core で Xvfb_Linux を使用しようとした場合、次のようなエラー メッセージが表示されました。
Couldn't open RGB_DB '/usr/X11R6/lib/X11/rgb'
error opening security policy file /usr/X11R6/lib/X11/xserver/SecurityPolicy
Could not init font path element /usr/X11R6/lib/X11/fonts/misc/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/Speedo/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/Type1/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/CID/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/75dpi/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/100dpi/, removing from list!
Fatal server error:
could not open default font 'fixed'
(2) Xvfb の起動に必要な X サーバー ファイルを、コマンドラインの引数に加える
Fedora Core での実行例:
$ ./Xvfb_Linux -ac -sp /usr/lib/xserver/SecurityPolicy -fp /usr/share/X11/fonts/misc -co /usr/share/X11/rgb -screen 0 1024x768x24 :20
A virtual frame buffer is now running on display :20.
(3) 作成したディスプレイ上で、簡単な X アプリケーションを実行する
$ xclock -display :20 &
display :20 のイメージをダンプし、そのイメージを確認することで、display :20 で時計が表示されるか確認します。
$ xwd -display :20 -root | xwud
時計が表示されるはずです。xwd(1) や xwud(1) の詳細については、それぞれの man ページを参照してください。
(4) 作成したディスプレイ上で Firefox を実行する
$ firefox --display :20
同じく xwd/xwud コマンドを使用して、Firefox が仮想フレーム バッファーで実行されていることを確認します。
$ xwd -display :20 -root | xwud
Xvfb を使用して X ディスプレイを作成できたが、Firefox がその仮想フレーム バッファーで実行できなかった場合、SOAtest 外部の個々のライブラリを更新する必要があります。たとえば、ディストリビューションが提供する旧式の Cairo ライブラリ (2D グラフィックス ライブラリ) は、Linux で問題を引き起こすことが知られています。Cairo で問題が発生した場合は、仮想フレーム バッファーが 8 ビット以上のディスプレイ色深度を使用することを確認することで、一般的な問題は解決します。問題が解決しない場合は、ライブラリそのものを更新する必要があるかもしれません。
SOAtest で動く Xvfb の取得
Xvfb に渡す必要のある引数が決定したら、SOAtest でそれらの引数を使用します。使用するには、必要な引数で Xvfb を呼び出すシェル スクリプトを作成し、Xvfb_Linux という名前を付けます。SOAtest は Xvfb を起動する際にそのシェル スクリプトを実行します。
(1) /path/to/soatest/plugins/com.parasoft.xtest.libs.web_[version]/root で、Xvfb_Linux を Xvfb_Linux.bin にリネームする
$ mv Xvfb_Linux Xvfb_Linux.bin
(2) 適切な引数で Xvfb_Linux.bin を実行するシェルスクリプト Xvfb_Linux.sh を作成する
Fedora Core での実行例:
----- #!/bin/sh # Use $@ to pass along any argument specified by SOAtest. # The $@ will include the display on which to run the server. # Currently this is always display :32. You can override this # by adding another display number as the last argument. # There can be problems with graphics libraries if you do # not set the display depth to greater than 8 using the # -screen argument. # Make sure to run Xvfb with 'exec' so that SOAtest will # kill the correct process. XVFB_DIR=`dirname $0` exec ${XVFB_DIR}/Xvfb_Linux.bin \ -ac \ -sp /usr/lib/xserver/SecurityPolicy \ -fp /usr/share/X11/fonts/misc \ -co /usr/share/X11/rgb \ -screen 0 1024x768x24 \ $@ -----
(3) Xvfb_Linux.sh のシンボリック リンクを作成する
$ ln -s Xvfb_Linux.sh Xvfb_Linux
これで、 SOAtest が Xvfb_Linux を実行するとき、Xvfb_Linux.bin へ適切な引数を渡すスクリプトが実行されます。
あるいは、スクリプトそのものを Xvfb_Linux と名付けることもできます。しかしながら、シンボリック リンクを作成することで、SAOtest にインストールされているものと、インストールされている Xvfb を実行するために作成したものとを区別することが容易になります。
(4) ヘッドレス モードで Web シナリオを実行する
SOAtest がシナリオを実行している間、ps(1) コマンドを使用して Xvfb_Linux.bin が実行されていることを確認します。そしてまた xwd/xwud コマンドを使用して Firefox が実行されていることを確認します (SOAtest はテストの実行が終わり次第 Firefox を終了します)。
$ ps -ef | grep Xvfb
$ xwd -display :32 -root | xwud
別のディスプレイで Xvfb を実行するよう設定した場合、xwd(1) を呼び出すときはそのディスプレイを使用します。