CCNETとMSTestを使った常時結合

MSTestは、Visual Studio Team System(VSTS)のテストツールで、VSTSのテストをコマンドラインから実行することができます。会社の環境をCCNETとMSTestと連携しVSTSのテストも実行できるようにしました。構成の流れをメモしておきます。

1. MSTestインストール
MSTestを利用するには、Visual Studio 2005 Team Editionのテスト機能をインストールする必要があります。私は、CCNETと同じサーバにTeam Suitesのテストツールだけをインストールオプションとして選択し、インストールしました。

2. CCNETからMSTest実行
テストの実行は、CCNET→MSBuild→MSTestで呼び出します。MSBuildにMSTestのタスクは無いので、下記のようにExecタスク経由で呼びました。

	<PropertyGroup>
		<MSTestInstallPath>E:\Program Files\Microsoft Visual Studio 8\Common7\IDE</MSTestInstallPath>
	</PropertyGroup>

	<!-- MSTest実行時の引数設定 -->
	<ItemGroup>
		<MSTestArguments Include="/testmetadata:..\work\trunk\NGAToolsSolution.vsmdi" />
		<MSTestArguments Include="/testlist:Archway.Windows" />
		<MSTestArguments Include="/resultsfile:&quot;$(CCNetArtifactDirectory)\mstest-results.trx&quot;" />
	</ItemGroup>

	<!-- メインビルド処理 -->
	<Target Name="ExecuteMSTest">
		<Exec Command="&quot;$(MSTestInstallPath)\MSTest.exe&quot; @(MSTestArguments, ' ')" />
    	</Target>

上記はMSBuildファイルの主要箇所だけ抜粋してます。ItemGroup要素内にはMSTestのコマンドライン引数を定義してます。ここでは引数として、下記を指定しました。

  • /testmetadata:

テストメタデータファイルを指定。これはVSのテストマネージャで設定した内容が含まれていて、MSTestから複数のテストアセンブリを実行する場合に利用します。

  • /testlist:

実行するテストリスト名を指定します。VSのテストマネージャでテストに割り当てたテストリスト名を指定します。

  • /resultsfile:

テスト結果のファイル名を指定します。ここではCCNETのアーティファクトフォルダ上に結果ファイルを出力するように指定しています。ちなみに、同じ名前のテスト結果ファイル名があった場合、MSTestの実行がエラーとなってしまったのでテスト実行前に同ファイル名をファイル削除するようにしてます。


3. Webダッシュボードの表示設定
あとは、CCNETのWebダッシュボードのdashboard.configファイルで、MsTestReport.xslファイルを呼び出す設定を追加します。


以上でCCNETからMSTestを呼び出し、VSTSのテストコードを実行できます。実行結果の画面はこんな感じです。

これでNUnitでもVSTSでも常時結合が可能に・・・むふふ。