简体   繁体   English

如何使用“.Net FrameWork 4.7”项目在 Azure DevOps Pipeline 上创建 Coverlet 覆盖率报告?

[英]How do I create a coverlet coverage report on Azure DevOps Pipeline with a ".Net FrameWork 4.7" project?

I'm currently trying to create a Coverlet coverage report with a pipeline on Azure DevOps.我目前正在尝试使用 Azure DevOps 上的管道创建 Coverlet 覆盖率报告。 But, since my project is a ".Net FrameWork 4.7" project, I can't create a coverage report using "DotNetCoreCLI@2" task like a ".Net Core" project.但是,由于我的项目是“.Net FrameWork 4.7”项目,因此我无法像“.Net Core”项目一样使用“DotNetCoreCLI@2”任务创建覆盖率报告。

There's my pipeline code:这是我的管道代码:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  buildPlatform: 'Any CPU'
  buildConfiguration: 'release'
  Tests.Filter: '**\UnitTestProject1.dll'
  Tests.Filter.Criteria: 'TestCategory!=Medium&TestCategory!=Large'
  Tests.Filter.SettingsFile:

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '**/*.sln'

- task: DotNetCoreCLI@2
  displayName: Test   
  inputs:
    command: 'test'
    projects: |
            $(Tests.Filter)
            !**\obj\**
    publishTestResults: true
    arguments: -c $(BuildConfiguration) --collect:"XPlat Code Coverage"
    
- task: DotNetCoreCLI@2
  inputs:
    command: custom
    custom: tool
    arguments: install --tool-path . dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

- script: reportgenerator -reports:$(Agent.TempDirectory)/**/*.coverage -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
  displayName: Create reports
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)\TestResults\Coverage\*.xml'

When all test are successful I receive:当所有测试都成功时,我收到:

Starting: Create reports
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.164.2
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
Script contents:
reportgenerator -reports:D:\a\_temp/**/*.coverage -targetdir:D:\a\1\s/coverlet/reports -reporttypes:"Cobertura"
========================== Starting Command Output ===========================
"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\a\_temp\e4754795-32ae-47f2-bd62-d1c8b925eb84.cmd""
2020-09-28T14:56:09: Arguments
2020-09-28T14:56:09:  -reports:D:\a\_temp/**/*.coverage
2020-09-28T14:56:09:  -targetdir:D:\a\1\s/coverlet/reports
2020-09-28T14:56:09:  -reporttypes:Cobertura
2020-09-28T14:56:09: The report file pattern 'D:\a\_temp/**/*.coverage' is invalid. No matching files found.
2020-09-28T14:56:09: No report files specified.
##[error]Cmd.exe exited with code '1'.    
Finishing: Create reports

I also tried to use VSTest@2 and activate "CodeCoverageEnable" but the code coverage is not compatible with Azure DevOps and a download is necessary to see the coverage report.我还尝试使用 VSTest@2 并激活“CodeCoverageEnable”,但代码覆盖率与 Azure DevOps 不兼容,需要下载才能查看覆盖率报告。

There's my pipeline code for VSTest@2:这是我的 VSTest@2 管道代码:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  buildPlatform: 'Any CPU'
  buildConfiguration: 'release'
  Tests.Filter: '**\UnitTestProject1.dll'
  Tests.Filter.Criteria: 'TestCategory!=Medium&TestCategory!=Large'
  Tests.Filter.SettingsFile:

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '**/*.sln'


- task: VSTest@2
  displayName: 'Running UnitTests'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
            $(Tests.Filter)
            !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    testFiltercriteria: '$(Tests.Filter.Criteria)'
    runSettingsFile: '$(Tests.Filter.SettingsFile)'
    runInParallel: true
    testRunTitle: 'Running UnitTests for $(Tests.Filter)'
    platform: '$(buildPlateform)'
    configuration: -c '$(buildConfiguration)'
    codeCoverageEnabled: true

Is there a way to create a coverage report compatible with Azure DevOps (Cobertura or JaCoCo) for my ".Net FrameWork 4.7" project without changing the project .Net FrameWork Version nor the type of the project?有没有办法为我的“.Net FrameWork 4.7”项目创建与 Azure DevOps(Cobertura 或 JaCoCo)兼容的覆盖率报告,而无需更改项目 .Net FrameWork 版本或项目类型?

After some research we manage to produce a Cobertura code coverage report for a .Net FrameWork project.经过一些研究,我们设法为.Net FrameWork项目生成了Cobertura代码覆盖率报告。 The following pipeline contain two crucial point you should integrate to your pipeline:以下管道包含您应该集成到管道中的两个关键点:

-The line : disable.coverage.autogenerate: 'true' in the Initiate pipeline section -启动管道部分中的行: disable.coverage.autogenerate: 'true'

-The section Code coverage report -代码覆盖率报告部分

trigger:
- master
#----------------------
# Initiate pipeline 
#----------------------
stages:
- stage: Dev
  pool:
    vmImage: 'windows-latest'
  variables:
    solution: '**/*.sln'
    buildPlatform: 'Any CPU'
    buildConfiguration: 'Release'
    disable.coverage.autogenerate: 'true' # because we overwrite the coverage report generation

  jobs:
  - job: Build
    steps:
    - task: NuGetToolInstaller@1
#-------------------------------
#Intalation report generator
#-------------------------------
    - task: DotNetCoreCLI@2
      inputs:
        command: custom
        custom: tool
        arguments: install --tool-path . dotnet-reportgenerator-globaltool
      displayName: Install ReportGenerator tool
    - task: DotNetCoreCLI@2
      inputs:
        command: custom
        custom: tool
        arguments: install --tool-path . coverlet.console
      displayName: Install Coverlet.Console tool
#-------------------------------
#Execute build
#-------------------------------
    - task: NuGetCommand@2
      inputs:
        restoreSolution: '$(solution)'
    - task: VSBuild@1
      inputs:
        solution: '$(solution)'
        platform: '$(buildPlatform)'
        configuration: '$(buildConfiguration)'
#-------------------------------
#Execute Unit tests
#-------------------------------

    - task: VSTest@2
      inputs:
        platform: '$(buildPlatform)'
        configuration: '$(buildConfiguration)'
#-------------------------------
#Code coverage report
#-------------------------------
    - task: PowerShell@2
      inputs:
        targetType: inline
        script: |
          Get-ChildItem *\bin -Include *Tests.dll -Recurse |
          Foreach-Object { 
            .\coverlet.exe $_.FullName --target "dotnet" --targetargs "vstest $($_.FullName) --logger:trx" --format "cobertura"
            $NewName = $_.Name + ".coverage.cobertura.xml"
            Rename-Item coverage.cobertura.xml $NewName
          }
      displayName: Generate Coverlet coverage report for test libraries

    - script: |
        mkdir .\reports
        .\reportgenerator.exe -reports:*coverage.cobertura.xml -targetdir:reports -reporttypes:"HTMLInline;HTMLChart"
        dir .\reports
      displayName: Create coverage reports in html format to be displayed in AzureDevOps

    - script: |
        mkdir .\reports
        .\reportgenerator.exe -reports:*coverage.cobertura.xml -targetdir:reports -reporttypes:"cobertura"
        dir .\reports
      displayName: Create coverage reports in xml format to be used for summary
#-------------------------------
#Publish coverage report
#-------------------------------

    - task: PublishCodeCoverageResults@1
      displayName: 'Publish code coverage to AzureDevOps'
      inputs:
        codeCoverageTool: Cobertura
        summaryFileLocation: '$(system.defaultworkingdirectory)\reports\Cobertura.xml'
        reportDirectory: '$(system.defaultworkingdirectory)\reports'

    - task: PublishBuildArtifacts@1
      displayName: 'Publish artifacts'
      inputs:
        PathtoPublish: '$(system.defaultworkingdirectory)\bin'
        ArtifactName: 'PublishBuildArtifacts'

The result is the following:结果如下: Cobertura 代码覆盖率

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM