9

TeamCity でビルドプロセスの一部として MSTest を実行するにはどうすればよいですか? 落とし穴は何ですか?

4

1 に答える 1

19

この回答は、特に Windows 上の TeamCity 7.1 向けですが、他の環境にも当てはまる場合があります。

  1. TeamCity ビルド構成の[一般設定]ページ で
    1. アーティファクト パス:Artifacts\MSTest => MSTest
  2. 新しいコマンド ラインビルド ステップを作成する
    1. カスタム スクリプト:if not exist Artifacts\MSTest mkdir Artifacts\MSTest
  3. 新しい MSTestbuild ステップを作成する
    1. アセンブリ ファイルの一覧表示:**\bin\**\*.Tests.dll
    2. 結果ファイル:Artifacts\MSTest\testResults.trx

落とし穴

実行するテスト アセンブリを指定する際のワイルドカードの使用

MSTest ビルド ステップで実行するテスト アセンブリを指定するときにワイルドカードを使用できますが、それらがどのように機能するかは正確にはわかりません。バグレポートが提出されました。

テストが失敗してもビルド プロセスが停止しない

一部のテストが失敗し、ビルドが失敗としてマークされた場合、MSTest ビルド ステップ自体は失敗しないことに注意してください。これは、テストが失敗した場合に実行したくない MSTest ビルド ステップの後にビルド ステップがある場合に問題を引き起こします (たとえば、バグがあることがわかっているビルドのインストーラーやドキュメントを作成する意味がない場合があります)。この問題は、TeamCity の以降のバージョンで修正されることを願っています。

テストが失敗したときにビルド プロセスを停止したい場合は、TeamCity REST APIを使用して現在のビルドが失敗としてマークされているかどうかを検出する新しいビルド ステップを作成できます (テストが失敗した場合、ビルド ステップはそうではないことに注意してください)。失敗とマークされていますが、ビルドは失敗しています)、現在のビルドステップを明示的に失敗させます。例:

  1. 新しいPowershellビルド ステップを 作成する
    1. スクリプトソースコード
    2. ソース コード: 以下のスクリプトを参照してください
  2. 新しく作成したビルド ステップが MSTest ビルド ステップの直後に来ることを確認してください
  3. この後のすべてのビルドステップが、前のすべてのステップが成功した場合のみに設定された実行ステップを持っていることを確認してください

脚本:

$xml = [xml](curl --request GET http://USERNAME:PASSWORD@HOSTNAME/httpAuth/app/rest/builds/%teamcity.build.id%)
Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/build" | % { $status = $_.Node.status }
if ($status -eq "FAILURE") {
    throw "Failing build step on purpose"
}
于 2012-11-03T19:35:26.430 に答える