无法通过PowerShell脚本将(某些)SpecFlow测试导入TFS?
我有一个在VSTFS 2015中每晚运行的SpecFlow测试的自动构建,它是通过PowerShell脚本填充的。大多数测试导入时没有问题,但是在大约800个测试中,大约有30个测试根本无法导入 从TFS生成返回的错误为: TF237086:无法保存工作项,因为至少有一个字段包含不允许的值。 由于这是一个脚本,这些特定的测试始终无法导入,这似乎很奇怪 下面添加了脚本(主要来自ye olde interweb):无法通过PowerShell脚本将(某些)SpecFlow测试导入TFS?,powershell,tfs,specflow,microsoft-test-manager,Powershell,Tfs,Specflow,Microsoft Test Manager,我有一个在VSTFS 2015中每晚运行的SpecFlow测试的自动构建,它是通过PowerShell脚本填充的。大多数测试导入时没有问题,但是在大约800个测试中,大约有30个测试根本无法导入 从TFS生成返回的错误为: TF237086:无法保存工作项,因为至少有一个字段包含不允许的值。 由于这是一个脚本,这些特定的测试始终无法导入,这似乎很奇怪 下面添加了脚本(主要来自ye olde interweb): 关于为什么某些测试无法导入,或者以前有人遇到过这种情况,有什么想法吗?找到/缩小错误
关于为什么某些测试无法导入,或者以前有人遇到过这种情况,有什么想法吗?找到/缩小错误的最佳方法是在MTM中手动创建失败的自动测试用例 实际上,要创建测试用例,只需要“Title”值。然而,您还应该再次确认您的测试用例中是否存在某个字段的错误默认值。因为至少有一个字段包含不允许的值,所以将导致此错误。这意味着这可能是一个测试用例模板错误
更多故障排除方法请查看类似问题:谢谢您的输入。。。我尝试过对测试进行更改,但与其他成功导入的测试(包括具有相同“功能”文件的测试)没有明显区别。糊涂了,所以。考虑到“Title”是唯一需要的主字段,并且测试是自动化的,我比较了其他测试的长度。结果表明,标题字段很可能有字符限制。要么如此,要么存在字符编码问题。解决这两个因素可以确保成功的测试导入。哈扎!
[CmdletBinding()]
$storage = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\AcmeCo.Acceptance.Tests.dll"
Write-Host "Importing tests from '$storage'"
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite1" /syncsuite:135777
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite2" /syncsuite:148870
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite3" /syncsuite:135775
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite4" /syncsuite:148872
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite5" /syncsuite:135781
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite6" /syncsuite:135782
& 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TCM.exe' testcase /collection:$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI /teamproject:"AcmeCo" /import /storage:$storage /category:"SomeSuite7" /syncsuite:148869
Write-Host "Tests imported"
Write-Host "Updating test plans"
[Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Client')
[Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.TestManagement.Client')
[Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Build.Client')
# Find all test plans using this build definition
$tpc = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
$tcm = $tpc.GetService([Microsoft.TeamFoundation.TestManagement.Client.ITestManagementService])
$buildServer = $tpc.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$teamProject = $buildServer.GetBuild($Env:BUILD_BUILDURI);
$testProject = $tcm.GetTeamProject($teamProject.TeamProject);
$testPlans = $testProject.TestPlans.Query("SELECT * FROM TestPlan")
$matchingTestPlans = @()
foreach($testPlan in $testPlans)
{
Write-Host "The current Test Plan build definition is: '$testPlan.BuildFilter.AreaPath'"
if($testPlan.BuildFilter.AreaPath -contains 'AcmeCo Test Plan')
{
$matchingTestPlans += $testPlan
}
}
# Update test plans with latest build
if($matchingTestPlans)
{
Write-Host "Updating test plans using '$Env:BUILD_BUILDDEFINITIONNAME' to '$Env:BUILD_BUILDURI' ($($matchingTestPlans.count) matching test plans)"
foreach ($matchingTestPlan in $matchingTestPlans) {
$matchingTestPlan.BuildUri = $Env:BUILD_BUILDURI
$matchingTestPlan.Save()
}
Write-Host "Test plans updated"
}
else
{
Write-Warning "Found no test plans to update."
}