尝试在 docker 管道 (Linux) 中生成测试覆盖率时以"No report files specified"运行



i使用基于Linux的Docker Pipeline 使用 C#中的 Nunit 框架来构建和进行自动测试。.NET核基于解决方案。

我的.gitlab-ci.yml-file中的"测试"工作:

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 Restore并构建了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文件与另一个项目进行了比较,我使用了这种方法,找不到任何可以解释此错误的区别。还有其他地方需要查看吗?

任何帮助都非常感谢!

通过添加 nuget packages coverlet.msbuild.msbuild dotnet-reportgenerator-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有所帮助。

最新更新