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 回答