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

无法从Azure Devops.NET核心构建中获取SonarCloud中的代码覆盖率

羊舌阎宝
2023-03-14

我已经为我的。NET核心项目在Azure Devops中使用。带有SonarCloud模板的NET Core。当我构建时,分析在SonarCloud中运行,但代码覆盖率为0%(我的解决方案中有测试)。

无论我对构建做什么配置调整,我都不能让代码覆盖工作。

我错过了什么?

我看到了这篇文章,https://dejanstojanovic . net/aspnet/2019/may/publishing-code-analysis-to-sonarcloud-from-azure-build-pipeline/实现了其中描述的powershell脚本,但我仍然没有在sonar cloud中获得代码覆盖率

我尝试使用这里描述的床罩,但仍然没有乐趣https://gunnarpeipman.com/aspnet/azure-devops-code-coverage/

我的管道包含以下任务

  • .NET Core - 还原
  • 准备分析配置
  • .NET Core - 生成
  • .NET Core - 测试
  • 运行代码分析
  • 发布质量门结果

我的测试任务配置:

参数:-配置$(BuildConfiguration)

发布测试结果和代码覆盖率-已选中

在运行代码分析任务的控制台中,我得到:

10:43:54.7  Fetching code coverage report information from TFS...
10:43:54.702  Attempting to locate a test results (.trx) file...
10:43:54.753  Looking for TRX files in: C:\\TFSBuilds\\TJPYHG04-GHJ01\\_work\\475\\TestResults
10:43:54.755  No test results files found
10:43:54.81  Did not find any binary coverage files in the expected location.
10:43:54.811  Falling back on locating coverage files in the agent temp directory.
10:43:54.812  Searching for coverage files in C:\\TFSBuilds\\TJPYHG04-GHJ01\\_work\\_temp
10:43:54.814  No coverage files found in the agent temp directory.

共有2个答案

马华茂
2023-03-14

无法从Azure Devops.NET核心构建中获取SonarCloud中的代码覆盖率

此问题可能是由vstest输出路径最近更改引起的:

vstest覆盖率文件的输出路径从< code>D:\a\1\s\TestResults\...到< code>D:\a\_temp\...

这破坏了管道中的后续脚本(例如,codecoverage.exe转换为xml,然后导入到sonarqube)。

Microsoft建议使用其余API检查测试工件并将它们重新下载到构建代理。

关于此问题的更多调查,您可以检查线程Azure DevOps(VSTS)扩展是否不再自动导入覆盖率和单元测试以跟踪问题。

幸运的是,声纳源团队刚刚发布了新版本的声纳Qube(v4.6.3)和声纳云(v1.6.3)扩展,以解决覆盖范围问题和回归问题。

希望这有所帮助。

周昊乾
2023-03-14

希望这个答案仍然与你相关。

最近,我遇到了与您类似的问题,我也在为我的案例使用Azure DevOps。

我就是这样解决的

第1步-将目录更改为单元测试子文件夹(与单元测试. csproj文件相同)并运行以下dotnet命令。

dotnet add package coverlet.msbuild

步骤2-将以下内容添加到SonarCloudPrepare Task Additional Properties中,或直接附加到yml文件中(如果您使用的是yml而不是经典编辑器)

    extraProperties: |
      sonar.exclusions=**/obj/**,**/*.dll
      sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/**/coverage.opencover.xml
      sonar.cs.vstest.reportsPaths=$(Agent.TempDirectory)/*.trx

该目录由您选择配置。

或者您也可以在回购中创建一个名为声纳项目的文件。属性,并在其中html" target="_blank">存储所有相关的SonarCloud属性。

第3步-将以下内容添加到您的dotnet测试任务中

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    arguments: '--configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --logger trx'
    testRunTitle: 'dotnet test'

您可能会注意到有一个“发布测试结果和代码覆盖率”的复选框,但是我仍然更喜欢使用< code >/p:collect coverage = true 。

您也可以在本地测试以运行< code > dot net test/p:collect coverage = true/p:coveretoutputformat = open cover-logger Trx 命令,并且< code > coverage . open cover . XML 将在您的单元测试文件夹中生成。

参考参考文献 2

旁注:如果您正在进行任何声纳测试包含属性,请注意声纳。测试和声纳。他们的测试是不同的。哈哈

参考文献:

  1. 在 Azure pipeline 中使用 SonarCloud
  2. 分析参数(官方文档)
  3. 测试覆盖率

希望这有帮助:)

 类似资料:
  • 我们有一个多模块Maven项目,并使用JaCoCo进行代码覆盖率分析。我准备了文件来运行测试用例并获取代码覆盖率。 下面是我的,添加了JaCoCo和其他插件,并且在Azure Devops构建中,在Maven任务中传递命令,尝试,参数在中定义。 我在日志中看到以下细节。 Maven日志: 分析完成日志: 测试运行: 目标:“清洁验证声纳:声纳” 选项:'-dsonar.projectkey=**-

  • 声纳投射物。特性 sonar.projectname=test sonar.language=js sonar.sources=src sonar.tests=src/app/client/src/app/sonar.javascript.lcov.reportpaths=src/app/client/src/app/sonar.javascript.lcov.reportpaths=src/ap

  • 我正在做一个大学项目,我需要覆盖当地法规,看看我的测试是否做得好。然而,netbeans控制台保持 --- jaco-maven-plugin:0.7.7.201606060606:报告(报告) @ 客户端服务提供器---由于缺少执行数据文件而跳过 JaCoCo 执行。 这是我的pom.xml

  • 我正在使用Jacoco插件使用jenkins获得代码覆盖率。我能够看到代码覆盖率。当我尝试使用相同的jacoco.exec文件来生成声纳代码覆盖率时,它显示:由于没有类文件,无法对项目覆盖率进行JaCoCo分析。我使用以下声纳属性: 我正在使用SonarQube 5.3

  • 问题内容: 有没有一种方法可以将代码排除在Cobertura覆盖率报告之外?我们提供了一些不应包含在覆盖率报告中的方法,因此不会降低覆盖率。 我知道四叶草具有这样的功能,但是我还没有为Cobertura找到任何类似的东西。 问题答案: 您可以从检测中排除类。然后它们不应出现在报告中。请参阅下面的 排除 语句。 您也可以忽略对某些方法的调用。请参阅下面的 ignore 语句。 如果您使用的是mave

  • 代码覆盖是查找未被测试执行的代码区域的过程。不过要记住的是这并不能说明你测试代码的有效性。 在requirements.txt文件中添加依赖包: coverage==4.4.2 然后,我们在manage.py中新增一个命令: import coverage COV = coverage.coverage( branch=True, include='project/*',