0

プロジェクトには、互いに依存している単体テストがいくつかあります。1 つのテストが実行された後、出力をキャプチャし、別のシステムで同期されるのを待ち、最初のテストの出力を使用して別のテストを実行します。Azureパイプラインを使用してこれを達成しようとしています。3 つのエージェント ジョブを作成しました。ジョブ A で Unit Test1 を実行し、ジョブ C の変数に渡す出力変数を作成しています。ジョブ B は、これら 2 つのエージェント間で 1 分間遅延するエージェントのないサーバーです。overrideTestrunParameters: '-sauce2 $(sauce5)' を使用して 2 番目のテストのパラメーターをオーバーライドしましたが、パラメーターを 2 番目のエージェント タスクに渡しているときにエラーが発生しました。

[警告]オーバーライド実行パラメーター文字列を解析できません: -sauce2 砕いたトマト

[エラー]SetupPhase.Run: 実行設定の更新中に例外が発生しました: System.FormatException: テスト実行パラメーターのオーバーライド中にエラーが発生しました。提供されたテスト実行パラメーターを確認してください。

Microsoft.VisualStudio.TestService.SettingsManager.OverrideParamsSettingsProcessor.GetOverrideParameters(String overrdeParametersString) で Microsoft.VisualStudio.TestService.SettingsManager.OverrideParamsSettingsProcessor.UpdateSettingsWithParameters(XDocument 設定) で Microsoft.VisualStudio.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 cancelToken) で

[エラー] 設定の更新が次のエラーで失敗しました: テスト実行パラメーターのオーバーライド中にエラーが発生しました。提供されたテスト実行パラメーターを確認してください。

テスト実行パラメータ:

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

単体テスト:

[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()

スクリーンショット: ここに画像の説明を入力

Powershell タスクでは新しいランタイム パラメータが出力されていることがわかりましたが、VS テスト タスクでは失敗しています。VSTest タスクでランタイム変数をキャプチャし、Azure パイプラインの別の VSTest タスクに渡す方法を教えてください。

4

1 に答える 1