天天看点

.net core+jenkins+sonar配置sonar扫描和单元测试覆盖率

公司使用的是.net core,单元测试框架使用的xunit,想要统计出单元测试的覆盖率。

demo项目使用的是coverlet的方式去统计,适用到公司项目时,由于公司项目使用了Rabbit MQ,导致统计出的覆盖率为0,这个是Coverlet的bug,官方github中,也有人提出了这个问题,目前暂未解决。https://github.com/tonerdo/coverlet/issues/506

于是又想了其他思路。

发现从VS自身的工具,是可以统计出覆盖率的。那可不可以直接模拟VS统计覆盖率的时候的操作过程,先把覆盖率文件得到,再去sonar scanner时指定覆盖率文件呢?答案是可行的。

使用到了以下工具包

1、sonarscanner for msbuild 下载红框中的zip包,解压后,修改SonarQube.Analysis.xml,和sonar-scanner-3.3.0.1492\conf中的sonar-scanner.properties文件

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

.net core+jenkins+sonar配置sonar扫描和单元测试覆盖率

2、CodeCoverage.exe,VS自带的覆盖率统计工具

D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe

3、vstest.console.exe,VS自带的执行单元测试的工具

D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe

具体思路如下:

1、先使用VS自带的CodeCoverage.exe和vstest.console.exe,执行单元测试,并得到单元测试的覆盖率文件

2、使用CodeCoverage.exe的analyze功能,将VisualStudio.coverage改为vstest.coveragexml的格式。

3、sonar scanner进行配置。

详细命令如下

cd WLYD.WaaSCore
dotnet build
           
cd WLYD.WaaSCore
"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" collect /output:VisualStudio.coverage /verbose "D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" /Logger:trx "D:\JenkinsWorkspace\workspace\waascorenew\WLYD.WaaSCore\Tests\WLYD.WaaSCore.Test\bin\Debug\netcoreapp2.2\WLYD.WaaSCore.Test.dll"
           

/Logger:trx  表明输出文件是trx格式。

cd WLYD.WaaSCore
"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe"  analyze /output:"vstest.coveragexml" "VisualStudio.coverage"
           
cd WLYD.WaaSCore
dotnet "D:\SoftWare\sonar-scanner-msbuild-fornetcore\SonarScanner.MSBuild.dll" begin /k:waascore /n:WAASCORE /d:sonar.host.url=http://192.168.200.152:9000 /d:sonar.login=admin /d:sonar.password=admin /d:sonar.cs.vstest.reportsPaths=TestResults\*.trx /d:sonar.cs.vscoveragexml.reportsPaths=vstest.coveragexml
           
cd WLYD.WaaSCore
dotnet build
           
cd WLYD.WaaSCore
dotnet "D:\SoftWare\sonar-scanner-msbuild-fornetcore\SonarScanner.MSBuild.dll" end /d:sonar.login=admin /d:sonar.password=admin
           

要注意的是,jenkins上,构建时,不要使用Windows Powershell,而要使用执行Windows批处理命令。

否则有些命令要报错。

参考网站:

https://blog.csdn.net/qq_23589557/article/details/69388539