【问题标题】:xUNIT softwaretest with .NET CORE and Docker使用 .NET CORE 和 Docker 进行 xUNIT 软件测试
【发布时间】:2021-02-02 13:12:14
【问题描述】:

我有一个解决方案,其中包含两个具有以下结构的项目:

“TestWebApp”项目是一个 xUnit 测试项目,包含软件测试。项目“WebApplication”是应该用 testproject 测试的软件。

该软件运行良好,但现在我想构建一个 docker 容器,该容器应包含在 gitlab ci-cd 管道中。我的问题包含两个步骤:

  1. 我应该构建一个包含业务应用程序(“WebApplication”)和软件测试(“TestWebApp”)的容器吗?如果是这种情况,我该怎么做?如何在容器中运行软件测试?我的 Dockerfile 如下所示
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app


FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
COPY ["TestWebApp/TestWebApp.csproj", "TestWebApp/"]

# ------------------SOFTWARE TEST-------------------------------------------------------------

RUN dotnet restore "TestWebApp/TestWebApp.csproj"
RUN dotnet build "TestWebApp/TestWebApp.csproj" -c Release
RUN dotnet test --no-build -c Release --results-directory /testresults --logger "trx;LogFileName=test_result.xml" TestWebApp/TestWebApp.csproj

# ------------------WEB APP-------------------------------------------------------------
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app


FROM base AS final
WORKDIR /app
COPY --from=publish /app .
COPY --from=test /testresults .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

如果我像下面的 dockerfile 一样尝试它,我会收到此错误:

------
 > FROM docker.io/library/test:latest:
------
failed to solve with frontend dockerfile.v0: failed to build LLB: failed to load cache key: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
  1. 如果我不应该构建一个包含业务应用程序和测试的容器 - 正确的方法是什么?

【问题讨论】:

    标签: c# docker .net-core xunit


    【解决方案1】:

    在 docker 容器中构建它们都很好——事实上,你会想要这样做;因为您希望您的测试在 CI/CD 管道的每个构建上运行。诀窍是它们将在您的初始 docker 映像中;但不是在部署的那个;并且您的 Dockerfile 代码显示您已经在使用 final 进行此操作。

    您的 docker 映像中的步骤应如下所示:

    • 构建项目
    • 构建测试
    • 运行测试
    • 将可部署对象复制到可部署 docker 映像

    最后一个工件,可部署的工件(没有你的测试)是被部署的;但这可以确保您的测试在每次构建时都运行。

    所以在你的回答中,唯一缺少的东西(至少从我的观察来看)是dotnet testbuildfinal 之间的测试项目。

    【讨论】:

    • 嗨,乔治,感谢您的快速部署。你能检查我更新的dockerfile吗?感谢您的帮助。
    • @LukasHieronimusAdler 看起来不错;测试通过时是否会生成构建工件?更重要的是,当测试失败时,它是否返回非零退出代码并导致构建失败?你会想要测试这些东西。
    • 当前 dockerfile 产生了我在下面发布的错误。 RUN dotnet restore "TestWebApp/TestWebApp.csproj" 被取消。
    • 我认为 dockerfile 试图拉取这个不可用的图像 docker.io/library/test:latest。有什么帮助吗?
    • 我的 dockerfile 中是否缺少 docker pull 或类似的东西?
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2020-12-27
    相关资源
    最近更新 更多