dra*_*ons 7 c# code-coverage gitlab-ci asp.net-core coverlet
我最近开始使用C#我们现有的一个遗留系统。我试图弄清楚这个遗留系统的代码覆盖率是多少。这是我的Sample.UnitTests.csproj文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoFixture.AutoMoq" Version="4.2.1" />
<PackageReference Include="AutoFixture.NUnit3" Version="4.2.1" />
<PackageReference Include="coverlet.msbuild" Version="2.9.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Moq" Version="4.8.2" />
<PackageReference Include="nunit" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="WireMock.Net" Version="1.0.4.17" />
<PackageReference Include="Utf8Json" Version="1.3.7" />
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="System.Buffers" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../Sample/Sample.csproj" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="dotnet-reportgenerator-cli" Version="4.2.10" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现我们可以使用coverlet它来生成cobertura样式报告。我完全按照我的 mac 盒子上的说明进行操作,一切正常,我可以看到在我的控制台上正确生成了报告,并且它还生成了index.html我们也可以用来可视化的文件。
dotnet add package coverlet.msbuild
dotnet restore
dotnet build
dotnet test /p:CollectCoverage=true
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:Exclude="[xunit*]\*" /p:CoverletOutput="./TestResults/"
dotnet reportgenerator "-reports:TestResults/coverage.cobertura.xml" "-targetdir:TestResults/html" -reporttypes:HTML;
Run Code Online (Sandbox Code Playgroud)
现在,由于我们gitlab ci/cd在项目中使用管道 - 有什么方法可以将这部分作为我的.gitlab-ci.yml文件的一部分,以便每当构建发生时它就可以自动为我生成报告,并且我的团队中的每个人都可以成功地看到它。因为到目前为止,这都是手动的,因为我需要在本地 Mac 上运行上述命令,并且我只能通过单击index.html文件从控制台看到它。
这些是我的文件阶段.gitlab-ci.yml,如下所示。如果需要,我也可以提供我的yml文件,但任何可以演示我如何做到这一点的简单示例都会有很大帮助。我尝试了很多搜索,但根本找不到关于如何通过 gitlab 管道(该管道使用 .net 应用程序的样式报告)来做到这coverlet一点cobertura。
stages:
- test
- publish
- increment
- deploy
- integrationTests
- release
Run Code Online (Sandbox Code Playgroud)
如果需要的话也可以通过 webhook 来完成吗?
由于文件夹混乱,另一个答案对我不起作用。Coverlet 将测试结果放在与各个单元测试项目相关的文件夹中。所以
TestResults各处的文件夹,path方法是设置为./**/TestResults/**/coverage.cobertura.xml.--results-directory选项来告诉dotnet test首先将这些文件放在哪里。我选择了第二个选项,将所有结果收集到cobertura存储库根目录的文件夹中。这是完整的、有效的.gitlab-ci.yml合并请求运行测试:
image : mcr.microsoft.com/dotnet/sdk:6.0
stages:
- test
test:
stage: test
only:
- merge_requests
script:
- 'dotnet test DotNetSolution
--collect:"XPlat Code Coverage"
--results-directory cobertura'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: cobertura/*/coverage.cobertura.xml
Run Code Online (Sandbox Code Playgroud)
可能需要使用实际的 GUID 而不是*.
stages:
- test
- publish
- increment
- deploy
- integrationTests
- release
build-and-test:
stage: test
image: mcr.microsoft.com/dotnet/sdk:6.0
script:
- dotnet add package coverlet.msbuild
- dotnet restore
- dotnet build
- 'dotnet test --collect:"XPlat Code Coverage"'
artifacts:
reports:
cobertura: TestResults/*/coverage.cobertura.xml
Run Code Online (Sandbox Code Playgroud)
GitLab 可以与之前的 Cobertura 报告进行比较。
如果您想要 HTML,只需将其包含在工件中即可。还可以将其发布到 GitLab Pages。
| 归档时间: |
|
| 查看次数: |
9190 次 |
| 最近记录: |