【问题标题】:Excluding files from code coverage analysis in Azure devops pipeline从 Azure devops 管道中的代码覆盖率分析中排除文件
【发布时间】:2022-08-17 18:48:45
【问题描述】:

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

这里,第 3 方 DLL 也包含在覆盖率报告中。我想排除所有 3rd 方 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 exclude


    【解决方案1】:

    将 .runsettings 文件添加到您的解决方案,并在测试步骤中引用它。 runsettings 文件将需要一个ModulePathsExcludeModulePath 节点,见下文:

    <?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 核心测试任务 --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://docs.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022

    【讨论】:

      【解决方案2】:

      @Jack 提供的 solution 正在使用 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>
      

      (注意额外的&lt;CodeCoverage&gt; 节点,与其他解决方案相比)

      接下来,使用 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>'
      

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2021-08-13
        • 2022-06-30
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多