【问题标题】:How to integrate MSTest in your TeamCity build process如何在 TeamCity 构建过程中集成 MSTest
【发布时间】:2013-08-12 17:41:05
【问题描述】:

如何在 TeamCity 的构建过程中运行 MSTest?有什么陷阱?

【问题讨论】:

    标签: teamcity mstest


    【解决方案1】:

    此答案专门针对 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 构建步骤中运行哪些测试程序集时,您可以使用通配符,尽管尚不清楚它们的具体工作方式。已提交bug report

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

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

    如果您希望在测试失败时停止构建过程,您可以创建一个新的构建步骤,使用 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"
    }
    

    【讨论】:

    • 我将此步骤直接添加到我的 teamcity 的构建过程中,作为我的 MSTest 构建步骤之后的构建步骤。调用此步骤后,我的整个构建都失败了。上述解决方案中是否有一些我应该换成我自己的个人服务器的东西? (即 USERNAME:PASSWORD@HOSTNAME?)
    • 是的,USERNAME:PASSWORD@HOSTNAME 需要是您的 TeamCity 用户名、TeamCity 密码和您的 TeamCity 服务器的主机名。
    • 我收到“'curl' 一词未被识别为 cmdlet 的名称”我的 powerscript foo 很低 :( 你能帮忙吗?
    • 对于不需要 curl 或身份验证的版本,请参阅stackoverflow.com/a/15391046/27867
    • 对于测试失败,有一个新的构建步骤启动策略:“仅当构建状态成功”youtrack.jetbrains.com/issue/TW-17002
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多