JenkinsのXvnc Pluginを使ってみる

JenkinsのXvnc Pluginの使い方をまとめます。

Xvnc PluginはGUIアプリケーションのテストに必要なプラグインです。

SlaveはUbuntu 14.04です。


1 Xvnc Pluginとは

VNCサーバを立ち上げてからテストを実行するプラグインです。

本プラグインはGUIアプリケーションのテストを可能にする為、極めて有用です。

テスト完了時のスクリーンショット保存をサポートします。

2 Xvnc Pluginのインストール方法

Jenkinsのプラグイン制御画面からインストールします。

Jenkinsの管理 -> プラグインの管理 -> 利用可能

https://dl-web.dropbox.com/s/6zbq8hn6y1m9q0r/0001_Xvnc_Install.png

3 vncserverのパスワード設定

テスト実行環境でvncserverが必要です。

$ sudo apt-get install -y vnc4server

Xvnc Pluginはテスト実行環境のローカルユーザとしてvncserverを立ち上げます。

その際、vncserverのパスワードファイルが設定されていることを前提としており、テスト実行環境でvncserverのパスワード作成が必要です。

$ vncserver # password
$ vncserver -kill :1
$ rm -f ${file}

4 システムの設定

システムの設定でvncserverのオプションとディスプレイ番号を設定します。

 

https://dl-web.dropbox.com/s/8fzeq5e4egv61e5/0002_Xvnc_Setting.png

 

Command Line vncserverのコマンドとオプション
Minimum display number ディスプレイ番号の最小値
Maximum display number ディスプレイ番号の最大値

 

Command Lineを空にした場合、以下のコマンドが実行されます。

/usr/bin/vncserver $DISPLAY_NUMBER -localhost -nolisten tcp

Command Lineに$DISPLAY_NUMBERを設定しておくと、Xvnc Pluginはディスプレイ番号をMinimum display numberとMaximum display numberの間からランダムに設定します。

 

SDLアプリケーションをテストしようとしたところ -nolisten tcpがついているとSDL_Initが上手く動作しませんでした(Failed to connect to the Mir Server)。

そこで以下の設定を用いています。

/usr/bin/vncserver $DISPLAY_NUMBER -localhost

ディスプレイ番号を固定しようと、Minimum display numberとMaximum display numberの値を同じにすると使用可能なディスプレイ番号がないと判定される場合があるようです。

できる限り広い範囲にMinimum display numberとMaximum display numberを設定したほうが良いです。

 

動的に生成されたディスプレイ番号は環境変数DISPLAYに設定されます

Vnc Recorder Pluginは$DISPLAYでディスプレイ番号を参照できます。

$ echo $DISPLAY
:50

5 ジョブの設定

ジョブの設定のビルド環境にてRun Xvnc during buildにチェックを入れます。

 

https://dl-web.dropbox.com/s/wamel7nv74wvmd2/0003_Job_Setting.png

 

Run Xvnc during build vncserverを実行する
Take Sceenshot Upon Build Completion スクリーンショットを撮る
Create a dedicated Xauthority file per build ビルド毎の.Xauthorityを保存する

 

スクリーンショットを撮るにはテスト実行環境にImageMagickのimportコマンド必要です。

$ sudo apt-get install -y imagemagick

6 実行

実行するとコンソール出力にvncserverの起動とスクリーンショットの保存を確認できます。

 

https://dl-web.dropbox.com/s/gba93zvegvxy6ux/0004_Job_Running.png

https://dl-web.dropbox.com/s/1xps4thyrlyu97v/0005_Screenshot.png