当前位置: 首页 > 知识库问答 >
问题:

找不到SonarQube的Azure管道中的报告代码覆盖率

严誉
2023-03-14

我正在努力为SonarQube在Azure运营模式管道中生成代码覆盖率报告。我需要此代码覆盖率报告,以便SonarQube了解单元测试中覆盖的总代码。

我在获取单元测试期间创建的报告的步骤中收到此错误消息:

2022-01-20T15:56:14.9054419Z ========================== Starting Command Output ===========================
2022-01-20T15:56:14.9976248Z ##[command]"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\Agents\xx\_work\_temp\cd6ffda1-xx-799dfd098791.ps1'"
2022-01-20T15:56:18.7184739Z You can invoke the tool using the following command: reportgenerator
2022-01-20T15:56:18.7185160Z Tool 'dotnet-reportgenerator-globaltool' (version '5.0.2') was successfully installed.
2022-01-20T15:56:18.9728580Z 2022-01-20T07:56:18: Arguments
2022-01-20T15:56:18.9729027Z 2022-01-20T07:56:18:  -reports:D:\Agents\xxx\_work\26\s/**/TestResults/coverage.opencover.xml
2022-01-20T15:56:18.9729118Z 2022-01-20T07:56:18:  -targetdir:coverage/Cobertura
2022-01-20T15:56:18.9729175Z 2022-01-20T07:56:18:  -reporttypes:Cobertura;HTMLInline;HTMLChart
2022-01-20T15:56:19.1740700Z 2022-01-20T07:56:19: The report file pattern 'D:\Agents\xxx\_work\26\s/**/TestResults/coverage.opencover.xml' found no matching files.
2022-01-20T15:56:19.1741530Z 2022-01-20T07:56:19: No report files specified.
2022-01-20T15:56:19.8181717Z ##[error]PowerShell exited with code '1'.
2022-01-20T15:56:19.8683861Z ##[section]Finishing: Generate Coverage Report

我在Azure Pipeline中生成报告所遵循的步骤:

1-在“dotnet构建”步骤之后,我包含了一个带有以下参数的“dotnettest”:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet test'
  inputs:
    command: test
    projects: '**/UnitTests.csproj'
    arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput=./TestResults/'
  continueOnError: true

2-在“dotnet测试”之后,第一步包括一个PowerShell脚本来生成报告,并将该报告转换为适用于Azure DevOps的Cobertura格式:

steps:
- powershell: |
   dotnet tool install dotnet-reportgenerator-globaltool --tool-path .
   ./reportgenerator "-reports:$(Build.SourcesDirectory)/**/TestResults/coverage.opencover.xml" "-targetdir:coverage/Cobertura" "-reporttypes:Cobertura;HTMLInline;HTMLChart"
  displayName: 'Generate Coverage Report'

据我所知,在此超级外壳步骤之后,我将不得不再包含2个步骤才能将报告发布到Azure和Sonarqube中。但是,看起来我有一些问题来查找在单元测试期间生成的报告。

对这个有什么想法吗?

谢谢。

共有2个答案

司空海荣
2023-03-14

如果没有生成coverage.opencover.xml文件,请仔细检查您的测试项目是否有对coverlet.msbuild和opencover的nuget引用。可能只有coverlet.msbuild是必需的。您应该能够在DevOps的日志中看到这一点,例如:

Calculating coverage result...
  Generating report 'D:\a\1\s\coverage\coverage.opencover.xml'

根据我的经验,OpenCover在SonarQube上的表现比Cobertura好。

潘俊
2023-03-14

如果您在测试项目中添加了coverletcoveragenuget包,那么您根本不需要使用opencovere中间步骤。以cobertura格式提供输出,可以由代码覆盖率yaml任务发布

请看这里https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#examples

这里https://docs . Microsoft . com/en-us/dot net/core/testing/unit-testing-code-coverage?tabs=linux

例:

以下步骤执行测试,并将测试结果和代码覆盖率发布到 Azure 开发运营。如果要将代码覆盖率结果发布到 SonarQube 服务器,请使用文件 ./测试结果/**/覆盖率报告/Cobertura.xml并使用 PowerShll/脚本任务进行发布。

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet test'
  inputs:
    command: test
    projects: '**/UnitTests.csproj'
    arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -r ./TestTesults --logger trx --logger "console;verbosity=detailed"'
  continueOnError: true
- task: PublishTestResults@2
  displayName: Publishing Test Results
  condition: always()
  inputs:
    testResultsFormat: "VSTest"
    testResultsFiles: "./TestResults/**/*.trx"
    testRunTitle: "Unittests"
    failTaskOnFailedTests: true
- task: PublishCodeCoverageResults@1
  displayName: Publish Code Coverage Results
  condition: always()
  inputs:
    codeCoverageTool: "Cobertura"
    summaryFileLocation: "./TestResults/**/coverage.cobertura.xml"
    pathToSources: [Your code location]
    reportDirectory: ./TestResults/**/coveragereport/coveragereport
   

希望这有所帮助

 类似资料:
  • 我使用jenkins的代码为每个插件生成覆盖率,并显示我喜欢的管道。是否有一个插件我可以使用它(例如Cobertura,但它似乎不受管道支持)?

  • SonarQube不再显示我用jacoco分析的项目的测试覆盖率。似乎SonarQube有了更新(我发现新规则的日期是5月19日)。我还假设,从那时起,不再评估使用jacoco maven插件收集的测试覆盖率。我见过类似问题的老问题,但那是4年前的事了:JaCoCo SonarQube不兼容版本1007 我将POM更新到最新的插件版本0.8.4,但无济于事。有什么想法吗?我需要在哪里更改一些东西,

  • 问题是当我们开发顶点代码,然后我们编写测试类,它至少覆盖顶点类75%的代码覆盖率,现在当我登录到开发人员控制台时,我能够看到代码覆盖率很少,因为手动需要去开发人员控制台,我想要一些可以向高级经理展示的关于整个组织的Salesforce Test代码覆盖率的报告 但是有没有可能在一个非常类似于sonarqube代码覆盖率报告的复杂报告中得到这个 提前谢谢卡洛琳

  • 免责声明初学者问题! 为了回答这个问题,我的项目结构高度简化,如下所示: 在阅读了Jeff Knupp关于单元测试的博客文章并写了一系列测试之后,我想看看我的代码现在被测试覆盖了多少。所以我安装了coverage.py,以下内容让我困惑: $coverage运行main。py(显示脚本中的打印/日志) $覆盖报告main.py 姓名、Stmts、小姐、封面 主要的py,114,28,75% 问题是

  • 我有一个反应应用,使用 npx 创建-反应-应用命令创建,并为 CI/CD 配置了一个基于 yaml 的 Azure DevOps 管道。然后我添加了一些简单的单元测试。 我在yaml管道中添加了一个脚本任务,以生成如下覆盖率结果。 但是这个任务显示以下输出,然后任务继续运行,永远不会结束。我必须取消管道运行才能最终停止它。不知道发生了什么。有什么想法吗? 但是,当我以CI =true作为前缀以按

  • 我试图设置为我的项目的代码覆盖 我的项目基于 下面是我项目的 然后我运行并看到以下内容 然后我运行,我看到 问题 -配置中有什么不正确 -如何生成报告? 谢啦