从 Azure DevOps 管道中的代码覆盖率分析中排除文件

问题描述 投票:0回答:2

我已启用 Cobertura 格式的代码覆盖率,并且尝试从 Azure DevOps 管道中的代码覆盖率分析中排除一些文件(尤其是第 3 方 DLL)。目前,以下是我在管道中获得的输出

此处,第 3 方 DLL 也包含在覆盖率报告中。我想排除所有第 3 方 DLL,例如 FluentAssertion、Microsoft.Azure 等。

下面是我的 YAML 文件中产生上述输出的一些行

- task: VSTest@2
  displayName: 'Run .NET Core Unit Tests $(ucSolution)'
  continueOnError: true
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\MyApp.*.UnitTests.dll
      !**\*TestAdapter.dll
      !**\obj\**
      !**\ref\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
    rerunFailedTests: true
    rerunFailedThreshold: '10'
    rerunMaxAttempts: '1'
    resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
    otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage results'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: $(build.ArtifactStagingDirectory)/Test/Results/**/**/*.cobertura.xml

有人可以建议我如何从分析或代码覆盖率报告中排除第 3 方 DLL 吗?

我真的很感谢您提供的任何帮助。

unit-testing azure-devops code-coverage cobertura
2个回答
9
投票

@Jack 提供的解决方案正在使用

dotnet test
和“XPlat 代码覆盖率”。对于
vstest
和“代码覆盖率”,您仍然需要 .runsettings 文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>FluentAssertions.*</ModulePath>
                <!-- Add more ModulePath nodes here. -->
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

(与其他解决方案相比,注意额外的

<CodeCoverage>
节点)

接下来,使用

runSettingsFile
参数引用 vstest 任务中的设置文件,如下所示:

- task: VSTest@2
  displayName: 'Run .NET Core Unit Tests $(ucSolution)'
  continueOnError: true
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\MyApp.*.UnitTests.dll
      !**\*TestAdapter.dll
      !**\obj\**
      !**\ref\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
    rerunFailedTests: true
    rerunFailedThreshold: '10'
    rerunMaxAttempts: '1'
    resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
    otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'
    runSettingsFile: '<PATH/TO/FILE.RUNSETTINGS>'

5
投票

将 .runsettings 文件添加到您的解决方案中,并在测试步骤中引用它。运行设置文件将需要

ModulePaths
Exclude
ModulePath
节点,如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <RunSettings>
        <DataCollectionRunSettings>
            <DataCollectors>
                <DataCollector friendlyName="XPlat code coverage">
                    <Configuration>
                        <ModulePaths>
                            <Exclude>
                                <ModulePath>.*FluentAssertions.*</ModulePath>
                            </Exclude>
                        </ModulePaths>
                    </Configuration>
                </DataCollector>
            </DataCollectors>
        </DataCollectionRunSettings>
    </RunSettings>

管道 yaml 中的示例测试任务。对于您的

VSTest@2
任务来说,它会略有不同,但原理相似。了解我如何为 .net core 测试任务添加参数
--settings MyFolder/.runsettings

      - task: DotNetCoreCLI@2
        displayName: 'Tests'
        inputs:
          command: test
          projects: 'MyTestProject.csproj'
          arguments: '--configuration debug --collect:"XPlat Code Coverage" --settings MyFolder/.runsettings'
          publishTestResults: true
          testRunTitle: "Run Tests"

可以在此处找到 Microsoft 文档: https://learn.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022

© www.soinside.com 2019 - 2024. All rights reserved.