将测试工件复制到多个代理 (YAML) 上的 运行 时如何在 Azure Devops 中查找单元测试 dll

How to find unit test dll in Azure Devops when copying test artifact to run on multiple agents (YAML)

我正在使用 Azure Devops YAML 构建管道来构建和测试我的 SQL SSDT 项目。我正在尝试修改我的 YAML 代码,以便测试部分将 运行 用于多个 Microsoft 托管代理(我已经购买了 2 个)。当我 运行 VSTest 任务作为第一个作业的一部分时 运行 在单个代理上,它 运行 没有问题。但是,当我 运行 它作为第二份工作的一部分时,单元测试不会 运行,并出现错误,说它找不到必要的测试文件。我需要在第二份工作中添加什么才能完成这项工作吗?

非常感谢。

trigger:
  branches:
    include:
    - develop
    - stage
    - master

pr:
- master
- stage
- develop


pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'


jobs:
- job: BuildPublish
  steps:
    - task: NuGetToolInstaller@1
      inputs:
        versionSpec: '2.*'

    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '$(solution)'
        feedsToUse: 'select'
        restoreDirectory: '$(Build.SourcesDirectory)/DIP_UsqlSln/packages'
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:USQLSDKPath=$(Build.SourcesDirectory)/DIP_UsqlSln/packages/Microsoft.Azure.DataLake.USQL.SDK.1.4.190703/build/runtime;USQLTargetType=SyntaxCheck;DataRoot=$(Build.SourcesDirectory) /p:EnableDeployment=true'## Heading ##
        createLogFile: true
        logFileVerbosity: 'detailed'

    - task: CopyFiles@2
      inputs:
        Contents: '**'
        TargetFolder: '$(build.artifactstagingdirectory)'
        CleanTargetFolder: true
        OverWrite: true
      
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'

- job: Test
  dependsOn: BuildPublish
  strategy:
    parallel: 2
  steps:
  - task: DownloadBuildArtifacts@0
    displayName: 'Download Build Artifacts'
    inputs:
      artifactName: 'drop'

  - task: VSTest@2
    inputs:
      platform: '$(buildPlatform)'
      configuration: '$(buildConfiguration)'
      runOnlyImpactedTests: true
      runInParallel: true

How to find unit test dll in Azure Devops when copying test artifact to run on multiple agents (YAML)

因为任务 DownloadBuildArtifacts 的默认 目标目录$(System.ArtifactsDirectory),但是 搜索文件夹 Visual Studio 测试任务是 $(System.DefaultWorkingDirectory).

当您在构建管道中使用这两个任务时,这两个预定义变量的值不同:

$(System.ArtifactsDirectory)的值应该是C:\agent\_work\r1\a.

$(System.DefaultWorkingDirectory)的值应该是c:\agent_work\s.

所以,会导致这个问题,找不到需要的测试文件。

要解决这个问题,我们只需要将这两个预定义变量的默认值更改为使用相同的值:

- task: DownloadBuildArtifacts@0

  displayName: 'Download Build Artifacts'

  inputs:

    artifactName: drop

    downloadPath: '$(System.DefaultWorkingDirectory)'

  - task: VSTest@2
    inputs:
      platform: '$(buildPlatform)'
      configuration: '$(buildConfiguration)'
      searchFolder: '$(System.ArtifactsDirectory)'
      runOnlyImpactedTests: true
      runInParallel: true

希望这对您有所帮助。