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日の記事を元にしています。)