Передача переменных из одной тестовой задачи Visual Studio в другую в Azure конвейере через несколько агентов - PullRequest
0 голосов
/ 03 марта 2020

У меня есть пара модульных тестов в проекте, которые зависят друг от друга. После выполнения одного теста я получу выходные данные, подожду, пока он синхронизируется в другой системе, и выполню еще один тест, используя выходные данные первого теста. Я пытаюсь добиться этого, используя azure конвейер. Я создал 3 задания агента - в задании A я запускаю Unit Test1 и создаю выходную переменную, которая передается переменной в задании C, задание B - сервер без агента, который задерживается на 1 минуту между этими двумя агентами , Я использовал overrideTestrunParameters: '-sauce2 $ (sauce5)', чтобы переопределить параметры для второго теста, но я получил ошибку ниже, при передаче параметров второй задаче агента.

[warning] Невозможно проанализировать переопределение строка параметров запуска: -sauce2 измельченные помидоры

[ошибка] SetupPhase.Run: Возникла исключительная ситуация при обновлении параметров запуска: System.FormatException: произошла ошибка при переопределении параметров тестового запуска. Проверьте предоставленные параметры тестового прогона.

в Microsoft.VisualStudio.TestService.SettingsManager.OverrideParamsSettingsProcessor.GetOverrideParameters (String overrdeParametersString) в Microsoft.VisualStudio.TestServiceTextServicePortingServicePortingServicePlayer_Settinger_ServicePlayer_SettingerSet .TestService.SettingsManager.CommonSettingsManager.UpdateCommonSettings (InputDataContract inputDataContract, settingsModifier settingsModifier) ​​при Microsoft.VisualStudio.TestService.SettingsManager.SettingsManager.UpdateSettingsAsRequired (InputDataContract inputDataContract) при MS.VS.TestService.VstestConsoleAdapter.SetupPhase.Run (VstestConsoleRunContext testRunContext, CancellationToken CancellationToken)

[error] Обновление настроек завершилось ошибкой: ошибка при переопределении параметров запуска теста. Пожалуйста, проверьте предоставленные параметры теста.

TestRunParameters:

 <RunSettings>
 <TestRunParameters>
    <Parameter name="sauce" value="chilly" />
    <Parameter name="sauce1" value="chilly1" />
    <Parameter name="sauce2" value="chilly2" />
</TestRunParameters>

UnitTests:

[Test]
    public void UnitTest1()
    {
        string sauce = TestContext.Parameters["sauce"];
        string sauce1 = TestContext.Parameters["sauce1"];
        TestContext.Progress.WriteLine(sauce);
        TestContext.Progress.WriteLine(sauce1);
        //creating outpute variable in azure
        TestContext.Progress.WriteLine("##vso[task.setvariable variable=sauce4;Secret=false;isOutput=true;]crushed tomatoes");
    }

    [Test]
    public void UnitTest2()
    {
        string sauce2 = TestContext.Parameters["sauce2"];
        TestContext.Progress.WriteLine($"sauce2: {sauce2}");
    }

Azure .yaml конвейер:

jobs:


- job: A
pool:
  name: New Agent Pool
  demands: 
  - msbuild
  - visualstudio
  - vstest

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'
  sauce: 'tomato'
  sauce1: 'pepper'

steps:
- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'      

- task: VSTest@2
  displayName: 'Unit Test1'
  inputs:
    testAssemblyVer2: |
      **\$(BuildConfiguration)\*Test*.dll
      !**\obj\**
    testFiltercriteria: 'Name=UnitTest1'
    runSettingsFile: SeleniumTest.ABC/Test.runsettings
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    overrideTestrunParameters: '-sauce $(sauce)'
  name: 'OutputVar'

  - job: B
dependsOn: 
  - A 
pool: server
steps:
- task: Delay@1
  inputs:
    delayForMinutes: '1'

  - job: C
dependsOn: 
  - A 
  - B
pool:
  name: New Agent Pool
  demands: 
  - msbuild
  - visualstudio
  - vstest

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'
  sauce2: $[dependencies.A.outputs['outputVar.sauce4']]

steps:
- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      # Write your PowerShell commands here.      
      Write-Host run time value
      Write-Host sauce2 = $(sauce2)

- task: VSTest@2
  displayName: 'Unit Test2'
  inputs:
    testAssemblyVer2: |
      **\$(BuildConfiguration)\*Test*.dll
      !**\obj\**
    testFiltercriteria: 'Name=UnitTest2'
    runSettingsFile: SeleniumTest.ABC/Test.runsettings
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    overrideTestrunParameters: '-sauce2 $(sauce2)'
  condition: succeededOrFailed()

Скриншоты: enter image description here

Я мог видеть, что в задаче Powershell печатается новый параметр времени выполнения, но его ошибка в VS Test Task. Может кто-нибудь посоветовать мне, как перехватить переменные времени выполнения в VSTest Task и перейти к другой VSTest Task в Azure конвейерах.

1 Ответ

2 голосов
/ 03 марта 2020

Выходная переменная успешно прошла от задания A к заданию C, поскольку задача powershell может распечатать новую переменную $(source2).

Проблема возникла из overrideTestrunParameters: '-sauce2 $(sauce2)' задачи vstest в задании C. $(sauce2) равно crushed tomatoes без кавычек "".

Пожалуйста, попробуйте заключить $(sauce2) в двойные кавычки:

overrideTestrunParameters: '-sauce2 "$(sauce2)"'

...