Powershell 如何在Team Build 2013测试后脚本中检测测试运行是否成功?
我在TFS 2013中有一个生成配置,它生成版本化的生成工件。此生成使用现成的流程模板工作流。我想在单元测试失败时销毁构建工件,只留下日志文件。我有一个测试后的powershell脚本。如何在此脚本中检测测试失败 以下是我的测试后脚本中的相关清理方法:Powershell 如何在Team Build 2013测试后脚本中检测测试运行是否成功?,powershell,tfs,tfsbuild,Powershell,Tfs,Tfsbuild,我在TFS 2013中有一个生成配置,它生成版本化的生成工件。此生成使用现成的流程模板工作流。我想在单元测试失败时销毁构建工件,只留下日志文件。我有一个测试后的powershell脚本。如何在此脚本中检测测试失败 以下是我的测试后脚本中的相关清理方法: function Clean-Files($dir){ if (Test-Path -path $dir) { rmdir $dir\* -recurse -force -exclude logs,"$NewVersion" }
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\"
$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"
如何测试函数中的测试成功?这不是一个直接的答案,但是。。。我们只是将保留策略设置为只保留x个版本。如果测试失败,工件不会被推到下一步 在我们的Jenkins设置中,每次新构建都会清除工件,所以这不是问题。只有通过的构建才会触发将工件推送到Octopus NuGet服务器的步骤。(根据更多信息更新) 实现这一点的方法是使用环境变量并在PowerShell脚本中读取它们。不幸的是,powershell脚本每次都在一个新进程中运行,因此您不能依赖正在填充的环境变量 也就是说,有一个变通方法,您仍然可以获得这些值。它包括在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\"
$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"
让我们把这个分开:
希望这是有用的 如果某些目录内容未被删除,并且该目录并非真正为空,则失败?或者只是
remove Item
cmdlet中的错误?失败是单元测试在单元测试运行期间失败。测试运行是团队构建模板的一个步骤。测试运行完成后,也会通过模板调用powershell脚本。这似乎可以做到这一点。似乎是TFS团队构建团队的重大失误。如果我在测试后执行一个脚本,那么我希望访问该脚本中的测试结果是合乎逻辑的。另外,从某个随机的.net开发者博客下载一个zip文件有点粗略,该博客托管在另一个随机的.net开发者博客上,并且希望任何人都能使用它。我用dotpeek四处搜索,它看起来像是大会引用了Telerik的分析系统。在博客帖子或下载的任何地方都没有这方面的通知。这并不能真正激发信心。我想我会回复海报上的建议,即他们开放此工具集的源代码,并通过nuget使其可用。@我自己也不完全同意这应该更容易做到。一旦我这样做了,至少我必须努力将环境变量从bat传递到powershell。幸运的是,我找到了另一个线程,希望我能帮别人省下我花在这个上面的两个小时,你是说这个RESTAPI吗?嗯,这是一个有趣的解决办法。我会把它放在我的后口袋里。是的,@RichardBanks,但不——它在内部部署产品中不可用。是的,很遗憾,我在一个客户工作现场,这就是环境。