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

时间:2012-11-03 19:35:26

标签: teamcity mstest

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

1 个答案:

答案 0 :(得分: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
  4. 陷阱

    在指定要运行的测试程序集时使用通配符

    在指定要在MSTest构建步骤中运行的测试程序集时,可以使用通配符,尽管尚不清楚它们是如何工作的。已提交bug report

    当测试失败时,构建过程不会停止

    请注意,如果某些测试失败并且构建被标记为失败,则MSTest构建步骤本身不会失败。如果您在MSTest构建步骤之后有构建步骤,如果您有测试失败,则不会运行这会导致问题(例如,生成安装程序或您知道存在错误的构建文档可能没有意义)。在TeamCity的更高版本中,问题有望为fixed

    如果您希望在测试失败时停止构建过程,可以创建一个新的构建步骤,使用TeamCity REST API检测当前构建是否已标记为失败(请记住,当测试失败时,构建步骤未标记为失败,但构建是),然后显式地失败当前构建步骤。例如:

    1. 创建新的 Powershell 构建步骤
      1. 脚本源代码
      2. 源代码:请参阅下面的脚本
    2. 确保在MSTest构建步骤之后立即执行新创建的构建步骤
    3. 确保此后的每个构建步骤执行步骤设置为仅当前面的所有步骤都成功
    4. 脚本:

      $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"
      }