Ich habe einen automatisierten Build für SpecFlow-Tests, die nachts in VSTFS 2015 ausgeführt werden und über ein PowerShell-Skript aufgefüllt werden. Die meisten Tests werden ohne Probleme importiert, aber bei ungefähr 800 Tests werden ungefähr 30 überhaupt nicht importiert.Fehler beim Importieren (einiger) von SpecFlow-Tests in TFS über das PowerShell-Skript?
Der Fehler aus der TFS Build zurückgegeben wird:
TF237086: Das Workitem kann nicht gespeichert werden, weil mindestens ein Feld einen Wert enthält, ist nicht erlaubt.
Da dies ein Skript ist, scheint es seltsam, dass diese bestimmten Tests konsistent nicht importiert werden.
Das Skript wird hinzugefügt unten (vor allem aus ye olde interweb gezogen):
[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."
}
Irgendwelche Ideen, warum einige Tests woulfd importieren scheitern, oder hat in dieser jemand kommen vor?
Vielen Dank für Ihre Eingabe ... Ich habe versucht, Änderungen an den Tests zu machen, aber erfolgreich von der anderen keinen signifikanten Unterschied nicht sehen können importierte Tests, einschließlich Tests mit derselben "Feature" -Datei. Verwirrt. –
So. Da der "Titel" das einzige erforderliche Hauptfeld ist und die Tests automatisiert sind, habe ich die Länge der Tests im Vergleich zu anderen Tests untersucht. Es zeigt sich, dass es höchstwahrscheinlich eine Zeichenbeschränkung für das Titelfeld gibt. –
Entweder das, oder es gibt ein Zeichencodierungs-Problem. Die Adressierung dieser beiden Faktoren gewährleistet einen erfolgreichen Testimport. Huzza! –