【发布时间】: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
【问题讨论】:
-
您在 Dockerfile 中进行发布构建,但
dotnet test默认情况下会启动调试构建。强制dotnet test在发布版本上运行,你应该得到你想要的。 -
它可以在我的语言环境机器上工作(创建测试文件夹和测试文件)而不更改任何参数,在 vsts 上它会是一样的吗?
-
您正在使用 BUILD_ARTIFACTSTAGINGDIRECTORY 变量,该变量的值可能为空,因此测试结果将映射到 ./tests-results/。尝试在 Docker Compose 任务的 Environment Variable 输入框中指定环境变量,然后在 volumn 中使用(将 BUILD_ARTIFACTSTAGINGDIRECTORY 替换为该变量)
标签: unit-testing docker .net-core docker-compose azure-devops