Не удается импортировать (некоторые) тесты SpecFlow в TFS через скрипт PowerShell?

У меня есть автоматизированная сборка для тестов SpecFlow, запускаемых каждую ночь в VSTFS 2015, которая заполняется с помощью сценария PowerShell. Большинство тестов импортируются без проблем, однако из примерно 800 тестов примерно 30 вообще не импортируются.

Ошибка, возвращенная из сборки TFS:

TF237086: рабочий элемент не может быть сохранен, так как по крайней мере одно поле содержит недопустимое значение.

Поскольку это сценарий, кажется странным, что эти конкретные тесты постоянно не импортируются.

Сценарий добавлен ниже (в основном взят из старого интернета):



    [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."
    }

Любые идеи относительно того, почему некоторые тесты не могут быть импортированы, или кто-то сталкивался с этим раньше?


person Billy Ray Valentine    schedule 04.10.2017    source источник


Ответы (1)


Лучший способ найти/сузить ошибку — создать неудачный автоматический тестовый пример вручную в MTM.

На самом деле для создания тестового примера требуется только значение «Title». Однако вы также должны дважды подтвердить, если в вашем тестовом примере есть какое-то неправильное значение по умолчанию для поля. Поскольку хотя бы одно поле содержит недопустимое значение, это приведет к этой ошибке. Это означает, что это может быть ошибка шаблона тестового примера.

Другие способы устранения неполадок, пожалуйста, посмотрите на этот похожий вопрос: -be-saved">Как устранить ошибку TFS TF237086 Не удается сохранить рабочий элемент...

person PatrickLu-MSFT    schedule 05.10.2017
comment
Спасибо за ваш вклад... Я попытался внести изменения в тесты, но не вижу существенной разницы с другими успешно импортированными тестами, включая тесты с тем же файлом «Feature». Сбит с толку. - person Billy Ray Valentine; 06.10.2017
comment
Так. Учитывая, что Заголовок является единственным обязательным основным полем, а тесты автоматизированы, я посмотрел на продолжительность тестов по сравнению с другими. Оказывается, скорее всего, есть ограничение на количество символов в поле «Заголовок». - person Billy Ray Valentine; 06.10.2017
comment
Либо так, либо проблема с кодировкой символов. Учет обоих этих факторов обеспечивает успешный импорт тестов. Ура! - person Billy Ray Valentine; 06.10.2017