Azure Pipelines - VSTest@2 生成的 CodeCoverage 在哪里?

Azure Pipelines - Where is the CodeCoverage generated by VSTest@2?

我已经尝试了数百次,但我仍然无法找到在 VSTest 任务中生成的 codeCoverage 文件。

看下面的代码。

我只想将代码覆盖率报告发布到管道。

求助!

那个代码覆盖率文件在哪里?

或者,如果您不想浪费时间写一些答案,请给我一些链接。

非常感谢!

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
  - master

jobs:
  - job: devbuild
    pool:
      name: 'Self Hosted VS2017'

    variables:
      solution: '**/*.sln'

    steps:
      - task: NuGetToolInstaller@0

      - task: NuGetCommand@2
        inputs:
          restoreSolution: '$(solution)'

      - task: VSBuild@1
        inputs:
          solution: '$(solution)'
          msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:Configuration=Debug /p:Platform="Any CPU" /p:OutDir=".\output\dev"'
          clean: true

      - task: VisualStudioTestPlatformInstaller@1
        inputs:
          packageFeedSelector: 'nugetOrg'
          versionSelector: 'latestPreRelease'

      - task: VSTest@2
        inputs:
          testSelector: 'testAssemblies'
          testAssemblyVer2: |
            **\dev\*.Tests.dll
          searchFolder: '$(System.DefaultWorkingDirectory)'
****************************************************************************
************THIS GUY  =>****************************************************
          codeCoverageEnabled: true
**********************<=****************************************************
****************************************************************************
          distributionBatchType: 'basedOnAssembly'
          dontDistribute: false
          publishRunAttachments: true

      - task: PublishCodeCoverageResults@1
        inputs:
          codeCoverageTool: 'cobertura'
          summaryFileLocation: '**/coverage.xml'
          reportDirectory: '**/coveragereport'
          failIfCoverageEmpty: true

设置system.debug变量为true,然后queue build,可以找到coverage文件的全路径(搜索日志中的覆盖率)

默认情况下,覆盖率文件的名称是xx.coverage

这是我必须做的事情来解决 Azure 对 vstest 结果所做的 "nice" 处理。

首先,运行 vstest.console,这样 azure 就不会尝试自行发布测试结果,让您可以控制正在发生的事情。

然后,使用 powershell 将 *.coverage 重命名为已知文件。

这是我获得 .coverage 路径的唯一方法,以便将我的覆盖范围导出到管道中(我的结果来自 vstest 运行ning c++ 和 c#,这是天蓝色的处理不好)。

谢谢。

尝试添加resultsFolder参数来控制文件位置

# Ejecucion de los Test
- task: VSTest@2
  displayName: 'Ejecucion de los Test'
  inputs:
    testSelector: 'testAssemblies' # Options: testAssemblies, testPlan, testRun
    testAssemblyVer2: | # Required when testSelector == TestAssemblies
      **\*.Test.dll
    searchFolder: '$(Build.SourcesDirectory)\Test' 
    vsTestVersion: '15.0'
    platform: 'x86' # Optional
    codeCoverageEnabled: true
    resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results'

这对我有用。我不得不告诉 vstest 以 Cobertura 格式输出,然后手动发布覆盖率结果:

- task: VSTest@2
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\*Tests.dll
      !**\*TestAdapter.dll
      !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    resultsFolder: '$(build.ArtifactStagingDirectory)/Test/Results'
    otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'  # <<<< this is the important bit
    codeCoverageEnabled: True

# vv Then add publish coverage manually vv
- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(build.ArtifactStagingDirectory)/Test/Results/**/*.xml'

然后我在 DevOps 的覆盖选项卡中得到了很好的 HTML 输出