2017-10-04 5 views
1

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?

Antwort

1

Der beste Ansatz zum Suchen/Eingrenzen des Fehlers besteht darin, den fehlgeschlagenen automatisierten Testfall manuell in MTM zu erstellen.

Um einen Testfall zu erstellen, wird nur "Titel" Wert benötigt. Sie sollten jedoch auch bestätigen, ob in Ihrem Testfall ein falscher Standardwert für ein Feld vorhanden ist. Da mindestens ein Feld einen Wert enthält, der nicht erlaubt ist, führt dies zu diesem Fehler. Dies bedeutet, dass dies möglicherweise ein Testfall-Vorlagenfehler ist.

Weitere Möglichkeiten, es zu beheben, wenden Sie sich bitte einen Blick auf diese ähnliche Frage: How to troubleshoot TFS error TF237086 "The work item cannot be saved..."

+0

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. –

+0

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. –

+0

Entweder das, oder es gibt ein Zeichencodierungs-Problem. Die Adressierung dieser beiden Faktoren gewährleistet einen erfolgreichen Testimport. Huzza! –

Verwandte Themen