如何在TeamCity构建过程中集成MSTest

9 teamcity mstest

如何在TeamCity中运行MSTest作为构建过程的一部分?有什么陷阱?

小智 19

此答案专门针对Windows上的TeamCity 7.1,但可能适用于其他环境.

  1. 在TeamCity构建配置中,在" 常规设置"页面上
    1. 工件路径:Artifacts\MSTest => MSTest
  2. 创建一个新的Command Linebuild步骤
    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"
}
Run Code Online (Sandbox Code Playgroud)