Nat*_*nSr 6 code-coverage dotnet-cli azure-pipelines dotnet-test
首先,一些背景信息:我有一个 Visual Studio 解决方案,其中包含几个生产类库和九个单元测试项目。所有项目都针对 .NET 5。我正在运行 .NET 5.0.401。所有单元测试项目都引用了coverlet.collector. 我不使用旧的coverlet.msbuild软件包。根据我的阅读,使用XPlat Code Coverage现在是 .NET Core 的惯用法。
我有一个用于 CI 构建的 Azure Pipelines 管道。作为此管道的一部分,我想运行所有单元测试,生成单元测试结果以上传到管道,并生成代码覆盖率结果以上传到管道。我已经阅读了几篇博客文章和文档,这些文章和文档似乎使这一切变得简单;然而,我发现事实并非如此。
让我们从在本地工作站上运行一些命令开始简单。出于本练习的目的,我们假设我已经使用以下命令成功构建了解决方案:
dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)
如果我运行这样的测试:
dotnet test Solution.sln --configuration Debug --no-build --no-restore --collect:"XPlat Code Coverage" --results-directory artifacts/test-results
Run Code Online (Sandbox Code Playgroud)
然后我看到代码覆盖率结果存储在以 GUID 命名的子目录中。我不知道微软为什么决定这样做,但这不是我所能控制的。
(运行此命令并截图后,我删除了该test-results目录。)
请记住,我还想生成单元测试结果。为此,我将--logger trx参数添加到同一命令行中。这次,创建了许多其他文件夹,其中包含看似重复的代码覆盖率结果。此外,我还得到了.trx我正在寻找的文件。
您会注意到,除了.trx我想要的九个文件之外,还有另外九个代码覆盖率报告。
我的自托管 Pipelines 构建代理上会生成类似的重复文件。在管道中,如果我尝试执行以下任务:
dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)
我收到错误:
##[warning]Multiple file or directory matches were found. Using the first match: C:\agent\_work\38\s\artifacts\test-results\$redacted\In\redacted\coverage.cobertura.xml
##[error]No code coverage results were found to publish.
Run Code Online (Sandbox Code Playgroud)
它在这里报告的目录不是我省略时生成的 GUID 目录之一--logger trx,而是重复目录之一。
这个答案似乎表明我做的一切都是正确的。我还对该答案发表了评论,希望得到一些帮助。
我有几个问题:
dotnet test正确调用以.trx同时生成代码覆盖率结果和文件?dotnet test支持这种场景吗?ReportGeneratorAzure Pipelines 市场中的扩展功能dotnet现在真的内置了吗?如果您有多个覆盖文件,则需要在发布之前先合并它们。您可以通过以下方式实现此目的:
- task: DotNetCoreCLI@2
displayName: "dotnet test"
inputs:
command: test
projects: "*.sln"
publishTestResults: true
arguments: -c Release --no-restore --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
- task: reportgenerator@4
displayName: "Merge code coverage reports"
inputs:
reports: "**/coverage.cobertura.xml"
targetdir: "$(Build.ArtifactStagingDirectory)/coverlet"
reporttypes: "Cobertura"
verbosity: "Verbose"
- task: PublishCodeCoverageResults@1
displayName: "Publish code coverage results"
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: "$(Build.ArtifactStagingDirectory)/coverlet/Cobertura.xml"
Run Code Online (Sandbox Code Playgroud)
注意:一些参数可能需要根据您的项目进行调整(例如您希望拥有 cobertura 文件的目录)。
我的代码中没有指定 trx 的记录器,但我在日志中看到它们是生成的。
如果您想通过运行设置,请查看此文档 - 配置测试运行。
| 归档时间: |
|
| 查看次数: |
4604 次 |
| 最近记录: |