Jenkins への自動化テストの統合
ソフトウェア工学において、継続的インテグレーション (CI) は品質管理プロセスを継続的に適用することを意味します。
今回は、Hudson/Jenkinsを使ってCIジョブをセットアップする方法について説明します。Subversion(SVN)のリポジトリへ変更がコミットされるたびに、Ranorexの自動化テストをビルド/実行し、テスト結果レポートを生成します。
- 継続的インテグレーション テストの利点
- インフラストラクチャ
- 継続的インテグレーション ツール
- ソース コード管理
- プラグイン
- プラグインのインストール
- プラグインの設定
- 新規ジョブの追加
- ソース コード管理の構成
- ビルドステップの追加
- “Run a Ranorex Test Suite”ステップの追加
- ビルド後の処理
- ジョブの実行
- リポジトリ フックの追加
- 最後に
継続的インテグレーション テストの利点
CIには多くの利点があります。テストが失敗したり、バグが出現した場合、開発者はデバッグに時間を割くことなく、コードベースをバグのない状態に戻すことができます。インテグレーションの問題を継続的に検出して修正することで、リリース直前の混乱を避けることができます。また、CIによるテストでは以下の処理を行います。
- 壊れたコード/互換性のないコードを早期に警告する
- 競合する変更を早期に警告する
- すべての変更を直ちにテストする
- テスト、デモ、リリース用に”現在の”ビルドを常に利用可能にする
- 作成されたコードが品質、機能性、およびシステム全体に与える影響を開発者に直ちにフィードバックする
- コードの頻繁なチェックインによって、モジューラーで、複雑度が低いコードの作成を開発者に促す
インフラストラクチャ
継続的インテグレーション ツール
以下のURLから、HudsonおよびJenkinsのダウンロードリンクとインストールについての説明にアクセスできます。
今回は、CIツールとしてJenkinsを使用します。JenkinsとHudsonの違いはほとんどありません。なお、JenkinsまたはCIジョブを実行するノード(マスター/スレーブ)は、通常、Windowsサービスとして実行されるため、UIアプリケーションを起動するのに必要な権限がありません。そのため、Ranorexの自動化テストがトリガーされるノードにおいて、JenkinsがWindowsサービスとして開始されないようにします。
Jenkinsマスターについては、Windowsのコントロールパネルにある「管理ツール」‐「サービス」を開き、下図のように [スタートアップの種類] を [無効] に設定します。
以下のコマンドを使って、インストールフォルダーから Jenkinsを手動で起動します。
実行コマンド:java -jar jenkins.war
Jenkinsを起動したら、Webブラウザを使用して次のアドレスにアクセスします: http://localhost:8080/
Jenkinsサーバーを構成するには、 Jenkinsのメニューに移動し、「Jenkinsの管理」‐「システムの設定」をクリックします。
注意: Ranorex コードをビルドおよび実行するマシンごとに、Ranorex のメイン コンポーネントをインストールし、有効な Ranorex ライセンスを設定する必要があります。
ソース コード管理
前述したように、この例ではCIプロセスのベースとしてSVNのリポジトリを使用します。このリポジトリには2種類のソリューションがあります。テスト対象アプリケーションとRanorexのソリューションです。
テストプロジェクトからテスト対象アプリケーションを起動するには、Ranorex Studioで対象ソリューションを開き、レコーディングモジュールのアクションテーブルに”Run Application”アクションを追加します。このアクションは、指定されたパスにあるテスト対象アプリケーションを起動します。ここでは、リポジトリのルートからの相対パスを指定します。
プラグイン
SVNのリポジトリにコミットしたソースをビルドするために、Jenkins用のSVNプラグインおよびMSBuildプラグインが必要です。また、メールプラグインを追加することで、ビルド実行時にメールを送信できます。
プラグインのインストール
Jenkinsのメニューにて、「Jenkinsの管理」‐「プラグインの管理」をクリックします。
利用可能なプラグインの一覧から次のプラグインをインストールします。
- MSBuild Plugin
- Email Extension Plugin(または、Email Extension Template Plugin)
- Subversion Plugin
- Ranorex Test Execution
プラグインの設定
インストールしたプラグインに対して以下の設定を行います。
- Jenkinsのメニューから「Jenkinsの管理」‐「システムの設定」をクリックします。”拡張E-mail通知“(Extended E-Mail Notification)の受信者を設定します。下図に示すように、デフォルトの件名と内容を設定します。内容に環境変数 “$BUILD_LOG“を含めると、生成されるメールに、ビルドとテストのコンソール出力が追加されます。
- SMTP サーバーを設定して”E-mail通知“(E-Mail Notification)を構成します。
- Jenkinsのメニューから「Jenkinsの管理」‐「Global Tool Configuration」に移動し、インストールした”msbuild.exe”を選択して”MSBuild“を構成します。
新規ジョブの追加
ここまでの作業でシステムを構成したので、新しいJenkinsジョブを追加できます。このジョブは、SVNリポジトリからチェックアウトされたファイルを更新し、テスト対象アプリケーションとRanorexソリューションの両方をビルドし、生成された実行モジュール(exe形式ファイルなど)を実行します。そしてテスト結果レポートファイルを添付したメールを送信します。
はじめに新規ジョブを作成します。ジョブの種類として「新規ジョブ作成」‐「フリースタイル・プロジェクトのビルド」を選択し、ジョブの名前を入力します。
ソース コード管理の構成
次にテスト対象アプリケーションとRanorexソリューションのソースをチェックアウトします。まず、ソースコード管理ツールとして「Subversion」を選択します。次に、テスト対象アプリケーションおよびRanorexソリューションがあるリポジトリを入力します。最後に、チェックアウト方法として 「‘svn update’を実行」を選択します。
この構成を使って、テスト対象アプリケーションとRanorexソリューションがチェックアウトされ、ローカルで更新されます。
ビルド ステップの追加
ソースコード管理の構成が完了したので、更新したソースのビルドを開始できます。
まず、両方のプロジェクトについてMSBuildステップを追加します。
構成したMSBuildのバージョンを選択し、テスト対象アプリケーションとRanorexソリューションの両方について、リポジトリのルート (Jenkinsジョブのワークスペースフォルダー)からの相対パスでソリューションファイルのパスを入力します。
“Run a Ranorex Test Suite” ステップの追加
2 つのMSBuildステップを追加したことで、テスト実行ファイルが自動的にビルドされます。ここで、新規にビルドしたアプリケーションをテストするべきです。それには、テスト実行ファイルを起動するために、“Run a Ranorex test suite”ビルドステップを追加します。“Run a Ranorex test suite”ビルドステップの追加の詳細については、以下の動画(英語)を見るか、または”“Run a Ranorex test suite” ビルド ステップの構成方法“を参照してください。
“Run a Ranorex test suite” ビルド ステップの構成方法
- Ranorex test suite file:RanorexソリューションのフォルダーにあるRanorex テストスイートファイル (*.rxtst) のパスを入力します。
- Ranorex run configuration:テスト実行時に使用する「実行設定」の名前を入力します。デフォルトでは、テスト スイートで現在選択されている実行設定が使用されます。実行設定を作成したり編集したりしたい場合、Ranorex StudioまたはRanorex Test Suite Runnerを使用してください。
- Ranorex report directory:テスト結果レポートおよびJUnit互換レポートが保存されるディレクトリを指定します。パスを指定しない場合、テスト実行ファイルと同じディレクトリに保存されます。
- Ranorex report file name:生成されるテスト結果レポートの名前を指定します。デフォルトでは、テストスイート設定で指定したファイル名が使用されます。
- Report file extension:テスト結果レポートを出力する際のファイル形式(html、またはrxlog)を選択します。
- JUnit-compatible report:有効にした場合、JUnit互換レポートとテスト結果レポートの両方が作成されます。
- Compressed copy of Ranorex report:テスト結果レポートとその関連ファイルを”rxzlog”ファイル形式として、 1 つのアーカイブに圧縮します。また、このオプションを有効にすると、以下の入力フィールドが表示されます。
- Compressed report directory:圧縮レポートの保存先ディレクトリを設定します。パスを指定しない場合、テスト実行ファイルと同じディレクトリに保存されます。
- Compressed report file:圧縮レポートファイルのファイル名を設定します。デフォルトでは、テストスイート設定で指定したファイル名が使用されます。
- Global parameters:テストスイートのグローバルパラメーターの値を作成または上書きします。次の書式でパラメーターを入力します。
“ParameterName=Value”
パラメーターを区切るには、セミコロン (;) または改行を使用します。 - Command line arguments:コマンドライン引数を入力します。利用できるすべてのコマンドライン引数については、Ranorexユーザーガイドを参照してください。
※テスト実行ファイルは、成功の場合は “0” を返し、失敗の場合は“-1”を返します。この戻り値に基づいて、Jenkinsはビルドを成功または失敗としてマークします。
ビルド後の処理
前の作業(”Run a Ranorex test suite”ビルドステップ)で “JUnit-compatible report”オプションを選択した場合、自動化テストの完了後、テスト結果をJenkinsにパブリッシュすることができます。この作業では、ビルドジョブに「ビルド後の処理」として、「Publish Junit test result report」(または、”Publish xUnit test result report”) を追加し、テストレポートXMLを定義して独自のレポートを作成します。
さらに、トリガーされたビルドの成功に関するメールを送信できます。このメールには、前述した圧縮レポートファイル(rxzlog)を添付しなければなりません。
圧縮レポートファイルを添付するには、「ビルド後の処理の追加」として、「拡張E-mail通知」を追加し、「Attachments」に、「“Run a Ranorex test suite”ビルドステップ」で定義した圧縮レポートファイルの場所を指定します。通知したいジョブステータスごとにトリガーを追加します。この例では、ジョブが失敗または成功したときにメールを送信します。
ジョブの実行
これまでの作業を完了し、変更を保存したら「ビルド実行」をクリックしてビルドが問題なく動作するかを確認します
生成したジョブをビルド実行すると、完了したビルドがすべてビルド履歴に表示されるはずです。アイコンはビルド時のステータスを表します。対象ビルドをクリックすると、JUnit互換レポートにてテスト結果が表示されます。また、ローカルワークスペース(Workspace/Reports)でテスト結果レポート(圧縮レポートファイル)を開き、テスト結果を参照します。
これまでの作業で設定したように、指定のメールアドレスに電子メールが送信されます。メールテキストにコンソール出力が含まれるほか、生成されたテスト結果レポート(圧縮レポートファイル)が添付されます。
リポジトリ フックの追加
ここまでの作業を行うことで、ビルドを手動でトリガーすることができます。
本作業ではSVNを利用しているので、コミットごとにスクリプトをトリガーするのが良いでしょう。それには、Subversion プラグインのドキュメントで説明されているように、サーバーサイドリポジトリフックを追加します。これにより、コミットされるソースの変更に対して、新しいビルドを開始するよう自動的にJenkinsをトリガーします。
また、他の方法として、Jenkinsジョブ構成でビルドトリガーとしてソース コード管理システムのポーリングをアクティブにすることができます。以下の図に示すように、ソース コード管理を行う間隔を定義できます (たとえば「 1 時間ごとに 5 分」など)。
最後に
上記の作業を実施すると、Ranorexによる自動化テストを含むCIプロセスを構築することができます。これにより、ソースのコミットのたびに自動化テストが実行されます。テスト実行が完了すると、Ranorexで実施されたテスト結果レポートを含む電子メールが送信されます。
注意: このブログは 2012年に公開された後、最新の技術情報を反映するために更新されました。
(この記事は、開発元 Ranorex 社 Blog 「Integrate Automated Testing Into Jenkins」2018年3月7日の記事を元にしています。)