如何在Team Build 2013 Post-Test脚本中检测测试运行是否成功?

时间:2014-11-07 19:53:35

标签: powershell tfs tfsbuild tfs2013

我在TFS 2013中有一个构建配置,可以生成版本化的构建工件。此构建使用开箱即用的流程模板工作流程。我希望在单元测试失败的情况下销毁构建工件,只留下日志文件。我有一个Post-Test powershell脚本。如何在此脚本中检测测试失败?

以下是我的测试后脚本中的相关清理方法:

function Clean-Files($dir){
    if (Test-Path -path $dir) { rmdir $dir\* -recurse -force -exclude logs,"$NewVersion" }
    if(0 -eq 1) { rmdir $dir\* -recurse -force -exclude logs }
}
Clean-Files "$Env:TF_BUILD_BINARIESDIRECTORY\"

如何在功能中测试测试成功?

3 个答案:

答案 0 :(得分:3)

(根据更多信息更新)

执行此操作的方法是使用环境变量并在PowerShell脚本中读取它们。不幸的是,powershell脚本每次都在一个新进程中运行,因此您不能依赖于正在填充的环境变量。

也就是说,有一个解决方法,所以你仍然可以获得这些值。它涉及在PowerShell脚本开头调用一个小实用程序,如本博文中所述:http://blogs.msmvps.com/vstsblog/2014/05/20/getting-the-compile-and-test-status-as-environment-variables-when-extending-tf-build-using-scripts/

答案 1 :(得分:2)

这不是一个直接的答案,但是......我们只是将保留策略设置为仅保留x个构建数。如果测试失败,则不会将工件推送到下一步。

使用我们的Jenkins设置,它无论如何都会擦除每个新构建的工件,因此这不是问题。只有传递构建才会触发将工件推送到Octopus NuGet服务器的步骤。

答案 2 :(得分:2)

最简单的方法(没有自定义构建模板等)在后测试脚本中执行类似的操作:

$testRunSucceeded = (sqlcmd -S .\sqlexpress -U sqlloginname -P passw0rd -d Tfs_DefaultCollection -Q "select State from tbl_TestRun where BuildNumber='$Env:TF_BUILD_BUILDURI'" -h-1)[0].Trim() -eq "3"

让我们分开:

  1. sqlcmd.exe是必需的;它与SQL Server一起安装,默认情况下位于路径中。如果您在没有SQL Server的计算机上进行构建,请安装Command Line Utilities for SQL Server
  2. -S参数是TFS服务器的服务器+实例名称,例如" SQLEXPRESS"本地机器上的实例
  3. 使用像我的示例一样的SQL登录名/密码组合,或者为TFS构建帐户提供SQL Server上的帐户(首选)。授予帐户对TFS实例数据库的只读访问权限。
  4. TFS实例数据库的名称类似于" Tfs_DefaultCollection"。
  5. " -h-1" sqlcmd语句末尾的部分告诉sqlcmd输出没有标题的查询结果; [0]选择第一个结果;删除前导空格需要Trim();状态" 3"表示所有测试均已通过。
  6. 也许有一天微软会发布一个很好的REST API来提供对测试运行/结果信息的访问。不要屏住呼吸 - 到目前为止我已经等了6年了。与此同时,直接点击TFS DB是一种安全可靠的方法。

    希望这有一些用处。