运行 在 "No report files specified" 中尝试在 docker 管道中生成测试覆盖率 (Linux)
Running in "No report files specified" when trying to generate test coverage in docker pipeline (Linux)
我使用基于 linux 的 docker 管道 来构建 NUnit 并进行自动测试基于 C#-.NET-Core 的解决方案中的框架。
"Test" 在我的 .gitlab 中工作-ci.yml-文件:
runTests:
stage: test
image: docker-registry.xyz.de/${CI_PROJECT_PATH}/build:${CI_COMMIT_REF_SLUG}_backend_${CI_COMMIT_SHA}
services:
- name: atsnngs/mysql-aurora-compatible
alias: mysql_test
tags:
- docker
- linux
- shared
variables:
GIT_STRATEGY: none
artifacts:
expire_in: 30m
paths:
- $CI_PROJECT_DIR/pages
script:
- mkdir $CI_PROJECT_DIR/pages
- mkdir mkdir /tmp/pages
- cd /app
- nohup dotnet run --project ./ServiceLoader/ServiceLoader.csproj Test > dotnetcore.log &
- sleep 10s && dotnet test -v normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude=[NUnit3.TestAdapter]*
- reportgenerator -reports:/app/Tests/coverage.opencover.xml -targetdir:/tmp/pages
- ls -l /tmp/pages
- mv /tmp/pages/index.htm /tmp/pages/index.html
- mv /tmp/pages $CI_PROJECT_DIR/
dependencies:
- build
在我用来构建我用来执行测试的图像的 Dockerfile 中,我安装了报告生成工具(出于可读性原因,我跳过了 dotnet 恢复并构建了部分 Dockerfile):
FROM microsoft/dotnet:2.1-sdk AS build
# install reportgenerator
RUN dotnet tool install --global dotnet-reportgenerator-globaltool
ENV PATH /root/.dotnet/tools:$PATH
但是当我 运行 管道时报告生成失败:
$ reportgenerator -reports:/app/Tests/coverage.opencover.xml -targetdir:/tmp/pages
No report files specified.
我已经将 Dockerfile 和 .gitlab-ci.yml 文件与我使用这种方法的另一个项目进行了比较,但找不到任何可以解释此错误的差异。还有其他地方我需要看一下吗?
非常感谢任何帮助!
通过为 coverlet.msbuild 和 dotnet-reportgenerator- 添加 Nuget 包 解决了这个问题cli。这些包丢失,导致报告生成错误。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<IsTestProject>true</IsTestProject>
<IsPackable>false</IsPackable>
...
</PropertyGroup>
<ItemGroup>
...
<PackageReference Include="Nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="coverlet.msbuild" Version="2.4.0" />
<PackageReference Include="dotnet-reportgenerator-cli" Version="4.0.5-rc2" />
</ItemGroup>
</Project>
就我而言,我在 csproj 文件中定义了多个。删除“net48”和其他旧版 .NET 框架 TFM 对我的情况有所帮助。
我使用基于 linux 的 docker 管道 来构建 NUnit 并进行自动测试基于 C#-.NET-Core 的解决方案中的框架。
"Test" 在我的 .gitlab 中工作-ci.yml-文件:
runTests:
stage: test
image: docker-registry.xyz.de/${CI_PROJECT_PATH}/build:${CI_COMMIT_REF_SLUG}_backend_${CI_COMMIT_SHA}
services:
- name: atsnngs/mysql-aurora-compatible
alias: mysql_test
tags:
- docker
- linux
- shared
variables:
GIT_STRATEGY: none
artifacts:
expire_in: 30m
paths:
- $CI_PROJECT_DIR/pages
script:
- mkdir $CI_PROJECT_DIR/pages
- mkdir mkdir /tmp/pages
- cd /app
- nohup dotnet run --project ./ServiceLoader/ServiceLoader.csproj Test > dotnetcore.log &
- sleep 10s && dotnet test -v normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude=[NUnit3.TestAdapter]*
- reportgenerator -reports:/app/Tests/coverage.opencover.xml -targetdir:/tmp/pages
- ls -l /tmp/pages
- mv /tmp/pages/index.htm /tmp/pages/index.html
- mv /tmp/pages $CI_PROJECT_DIR/
dependencies:
- build
在我用来构建我用来执行测试的图像的 Dockerfile 中,我安装了报告生成工具(出于可读性原因,我跳过了 dotnet 恢复并构建了部分 Dockerfile):
FROM microsoft/dotnet:2.1-sdk AS build
# install reportgenerator
RUN dotnet tool install --global dotnet-reportgenerator-globaltool
ENV PATH /root/.dotnet/tools:$PATH
但是当我 运行 管道时报告生成失败:
$ reportgenerator -reports:/app/Tests/coverage.opencover.xml -targetdir:/tmp/pages
No report files specified.
我已经将 Dockerfile 和 .gitlab-ci.yml 文件与我使用这种方法的另一个项目进行了比较,但找不到任何可以解释此错误的差异。还有其他地方我需要看一下吗?
非常感谢任何帮助!
通过为 coverlet.msbuild 和 dotnet-reportgenerator- 添加 Nuget 包 解决了这个问题cli。这些包丢失,导致报告生成错误。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<IsTestProject>true</IsTestProject>
<IsPackable>false</IsPackable>
...
</PropertyGroup>
<ItemGroup>
...
<PackageReference Include="Nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="coverlet.msbuild" Version="2.4.0" />
<PackageReference Include="dotnet-reportgenerator-cli" Version="4.0.5-rc2" />
</ItemGroup>
</Project>
就我而言,我在 csproj 文件中定义了多个。删除“net48”和其他旧版 .NET 框架 TFM 对我的情况有所帮助。