2013年1月29日火曜日

Visual Studio 2012 C++ Unit Test Framework をコマンドライン実行 + Jenkins

Visual Studio 2012 C++ Unit Test Framework でテストコードが書けるようになっても、
テストエクスプローラーで実行していたのでは自動化できない!

というわけで、自動化するためにコマンドライン実行をする方法を調べました。
ついでに、Jenkins で結果を集計する方法も調べています。

コマンドライン実行する方法
"%ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
を使います。

テストプロジェクトをビルドすると dll が作成されるので、
その dll パスを vstest.console.exe の引数に渡すと実行されます。

vstest.console.exe iutest_unittest.dll

その他のコマンドラインオプションは vstest.console.exe /? とすることで見ることができます。
または、MSDN にも載っています。

Jenkins で集計する方法
/logger オプションで結果の出力フォーマットを指定できます。
/logger:trx で Visual Studio テスト結果ファイル(TRX) で出力でき、
trx ファイルは MSTest plugin を使えば結果の集計ができそうです。


まずは、ビルド手順を追加して以下のようにテストを実行します。
vstest.console.exe iutest_unittest.dll /logger:trx

テスト結果は
./TestResults/${USERNAME}_${COMPUTERNAME} ${日付} ${時間}.trx
に出力されます。

次に、「ビルド後の処理の追加」から「Publish MSTest test result reposrt」を選択し、trx ファイルを集計するように設定します。


以上で設定は終わりです。


このようにテスト結果が集計されました。


3 件のコメント:

  1. はじめまして。記事の方法でテストの実行とjenkinsでの集計まで上手くいったように思えたのですが、*.trxがたまっていくため、集計されるテスト数は増加し続け、エラー数は減少しません。筆者様は./TestResults/の過去のテスト結果(vstest.console.exeが出力した*.trx)をどのようにして削除していらっしゃるのでしょうか。

    返信削除
    返信
    1. コメントありがとうございます。
      *.trx の削除ですが、テストの実行前にすべて削除するようにしています。
      Jenkins の「ビルド手順の追加」で「Windowsバッチコマンドの実行」をテストのビルド手順の前に追加して、以下のように削除をしています。

      del /F /Q TestResults\*.trx
      exit /b 0

      削除
    2. なるほど。組み合わせればなんとでもなるのですね。ありがとうございました。

      削除