TeamCity dotCover报告Sonar的路径

Dip*_*esh 11 teamcity dotcover teamcity-7.1 sonar-runner sonarqube

我正在尝试将声纳分析集成到TeamCity构建过程中.我有一个NUnit构建步骤,它运行我的单元测试,然后运行dotCover覆盖.

我的下一步是声纳 - 跑步者.当前存在的配置是; gallio.mode = dotCover,sonar.gallio.mode = reuseReport但我还需要sonar.gallio.reports.path.

有人知道上一步生成的dotCover报告的路径吗?

小智 5

在同一问题上花费了一些时间,但使用较新的 Sonar c# 插件 (v.2.3) - 已取消对 Gallio 的支持,但仍需要报告。

为了直接回答这个问题,TeamCity 将 dotcover快照文件放入一个名为coverage_dotcover27574681205420364801.data(其中数字是随机的)的临时文件夹中。所以

程序是:

  1. 在包含测试和覆盖的步骤之后,在 Team City 中创建一个 PowerShell Build 步骤
    • 如果您愿意,可以使用命令行
  2. 在临时文件夹中获取完整的 dotCover快照名称
  3. 运行 dotCover 从快照生成 HTML 报告
    • 注 - Sonar(c# plugin v 2.3)仅支持 dotCover HTML 报告
  4. 将生成的 HTML 报告传递给声纳

PowerShell 脚本:

$snapshot = Get-ChildItem "%system.teamcity.build.tempDir%" `
     -Filter coverage_dotcover*.data `
     | select -ExpandProperty FullName -First 1

%teamcity.dotCover.home%\dotCover.exe report `
    /ReportType=HTML /Source="$snapshot" `
    /Output="%sonar.coverageReport%"
Run Code Online (Sandbox Code Playgroud)

现在您可以在sonnar runner中指定您的报告为 sonar.cs.dotcover.reportsPaths='%sonar.coverageReport%'

其中 %sonar.coverageReport% 是 TeamCity 中定义的属性


and*_*van 5

TeamCity 2017 似乎不再创建coverage_dotcover*.data 文件。相反,它会创建 *.dcvr 文件。

在创建报告之前,可能需要合并多个文件。因此 powershell 需要更新。

因此,使用Oleksandr提供的步骤,只需将脚本更新为:

$snapshotfiles = Get-ChildItem "%system.teamcity.build.tempDir%" `
 -recurse -Filter *.dcvr `
 | select -ExpandProperty Name

$snapshots = $snapshotfiles -join ";"

%teamcity.dotCover.home%\dotCover.exe merge /Source=$snapshots 
/Output=dotcovermerge.dcvr

%teamcity.dotCover.home%\dotCover.exe report `
/ReportType=HTML /Source=dotcovermerge.dcvr `
/Output="%sonar.coverageReport%"
Run Code Online (Sandbox Code Playgroud)

然后属性 %sonar.coverageReport% 可以传递给 sonarqube 扫描仪。顺便说一句,您需要在 TC 中为 %sonar.coverageReport% 创建一个参数,例如“sonarcoverage.html”


Jef*_*ton 4

我找不到使用内置 NUnit 运行程序来执行此操作的方法。我设法通过使用 powershell 构建步骤手动调用所需的命令来使其工作。

第一步是在 dotCover cover 调用中通过 Gallio 运行 NUnit 测试:

& dotCover cover `
/TargetExecutable="C:\Program Files\Gallio\bin\Gallio.Echo.exe" `
/TargetArguments="/report-type:XML /report-name-format:test-report /runner:IsolatedProcess /report-directory:.\Gallio .\Path\Test.dll" `
/Filters="+:WhatToCover" `
/Output=coverage.snapshot
Run Code Online (Sandbox Code Playgroud)

然后,Sonar 可以通过reuseReport 获取 Gallio 测试报告,TeamCity 会自动检测测试结果。

您可以通过将服务消息写入标准输出来使 TeamCity 直接处理覆盖率快照:

Write-Host "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='coverage.snapshot']"
Run Code Online (Sandbox Code Playgroud)

要将覆盖信息转换为 Sonar 可用的格式,您需要使用 dotCover 报告命令和未记录的报告类型 TeamCityXML

& dotCover report /Source=coverage.snapshot /Output=coverage-report.xml /ReportType=TeamCityXML
Run Code Online (Sandbox Code Playgroud)