【问题标题】:VSTS : dotnet with Docker fail to publish testsVSTS:带有 Docker 的 dotnet 无法发布测试
【发布时间】:2018-03-26 13:00:28
【问题描述】:

我尝试在持续集成期间在VSTS上发布我的单元测试,我使用docker,在播放发布任务时,我仍然收到以下错误,因此dotnet测试生成的xml文件 找不到命令。

No test result files matching **\test-results.xml were found.

如果我在本地运行命令 docker-compose run web-tests,则会创建一个包含预期 test-results.xml 文件的 tests-results 文件夹。

我在 VSTS 上做错了什么?

代码仓库:Github

我的文件夹架构:

web/
├── web/
│   └── web.csproj
│   └── Dockerfile
│       
├── web.test/
│  └── web.test.csproj
│       
└── web.sln
└── docker-compose.yml
└── docker-compose.override.yml

Dockerfile(编辑删除额外的 dotnet 测试命令):

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src 
COPY web.sln ./
COPY web/web.csproj web/
COPY web.test/web.test.csproj web.test/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/web
RUN dotnet build -c Release -o /app

FROM build as test
WORKDIR /src/web.test
#RUN dotnet test

FROM build AS publish
WORKDIR /src/web
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "web.dll"]

docker-compose.yml:

version: '3.4'
services:
  web:
    image: web
    build:
      context: .
      dockerfile: web/Dockerfile
  web-tests:
    image: web-tests
    build:
      context: .
      dockerfile: web/Dockerfile      
      target: test
    volumes: 
      - ${BUILD_ARTIFACTSTAGINGDIRECTORY:-./tests-results/}:/tests

docker-compose.override.yml:

version: '3.4'
services:
  web:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
      - "80"
  web-tests:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
      - "80"
    entrypoint:
      - dotnet
      - test
      - --logger
      - trx;LogFileName=/tests/test-results.xml

还有我的两个 VSTS 任务

【问题讨论】:

  • 您在 Dockerfile 中进行发布构建,但 dotnet test 默认情况下会启动调试构建。强制 dotnet test 在发布版本上运行,你应该得到你想要的。
  • 它可以在我的语言环境机器上工作(创建测试文件夹和测试文件)而不更改任何参数,在 vsts 上它会是一样的吗?
  • 您正在使用 BUILD_ARTIFACTSTAGINGDIRECTORY 变量,该变量的值可能为空,因此测试结果将映射到 ./tests-results/。尝试在 Docker Compose 任务的 Environment Variable 输入框中指定环境变量,然后在 volumn 中使用(将 BUILD_ARTIFACTSTAGINGDIRECTORY 替换为该变量)
  • 好的,让我们删除 env 变量并将其设置为硬编码:VSTS 仍然找不到 xml 结果文件...最初的想法来自here,但似乎缺少一些东西。它将我的代码设置为公共回购。如果有人能实现我需要的,我会很高兴(即:将此测试结果 xml 文件从 Docker 发布到 VSTS 中)。回购链接在这里:Github

标签: unit-testing docker .net-core docker-compose azure-devops


【解决方案1】:

您应该在使用撰写文件中的entrypoint 选项运行测试时删除Dockerfile 中的RUN dotnet test。 如果您有RUN dotnet test 并且任何测试失败,则整个构建将失败并且不会生成任何测试结果文件。

如果您的所有测试都通过了,那么“发布测试结果”任务应该会成功(但请注意您运行了两次测试)。

您是否尝试过成功的测试套件?

【讨论】:

  • 感谢您的帮助!好的,我从 Dockerfile 中删除了 dotnet test 命令。该任务现在只运行一次(谢谢),但仍然遇到同样的问题:找不到 xml 文件。此外,之前(使用 dotnet test 命令)我能够看到结果(通过与否),现在这个输出不再出现:然后进行测试吗?
  • 问题出在后台运行的 docker compose 任务上。无论如何,你的整篇文章都很棒,我建议你不要在维基上发表它(也许用英文更容易看到?)
  • 抱歉,我错过了您实际设置 BUILD_ARTIFACTSTAGINGDIRECTORY 环境变量的位置以及您使用什么值来使代码正常工作?
【解决方案2】:

您需要取消选中 Docker Compose 任务的 Run In Background 选项。

【讨论】:

  • 终于成功了,非常感谢!据我了解,在创建测试 xml 文件之前启动的发布任务不是同步的任务吗?我已经解决这个问题 5 天了,你拯救了我的一周!
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 2017-11-02
  • 2016-05-10
  • 2023-04-07
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多