社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试

dotNET跨平台 • 3 年前 • 454 次点击  

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part11-run-unit-tests-inside-a-docker-container/

在本教程中,我将展示如何在docker容器中运行单元测试。

因为我将使用kubernetes在容器中运行微服务,所以单元测试、集成测试、持续集成和持续交付将使用docker镜像和容器来完成。

LogCorner.EduSync.Speech.Domain.UnitTest

让我们继续打开LogCorner.EduSync.Speech.Domain.UnitTest项目并创建一个这样的docker文件(你可以通过右键单击项目名称并选择Docker Support来生成 docker 文件)

Docker文件

Docker文件应如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build

使用 mcr.microsoft.com/dotnet/core/sdk:3.1-buster 作为基础镜像

WORKDIR /src

在docker镜像中创建/src目录。

COPY [“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”, “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/”]
COPY [“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/LogCorner.EduSync.Speech.Domain.csproj”, “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/”]

复制当前文件夹(src)上的LogCorner.EduSync.Speech.Domain.UnitTest.csproj文件和LogCorner.EduSync.Speech.Domain.csproj文件

请注意,应复制引用的.csproj项目文件,以便以后能够恢复包。

RUN dotnet restore “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”:

为Log Corner.EduSync.Speech.Domain.UnitTest项目和引用的项目恢复包。

COPY . . 

将所有内容(除了.dockerignore文件中包含的文件/目录)复制到docker镜像中的/src目录。

WORKDIR “/src/LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest”

将当前文件夹更改为LogCorner.EduSync.Speech.Domain.UnitTest 项目。

要对其进行测试,请移至\LogCorner.EduSync.Command\src文件夹并运行以下命令以使用unite test Docker文件构建和创建名为unittest-image的镜像:

docker build -t unittest-image -f LogCorner.EduSync.Speech\LogCorner.EduSync.Speech.Domain.UnitTest\Dockerfile .

然后,使用unittest-image作为镜像以交互模式启动容器

docker run -it unittest-image

最后使用以下命令运行单元测试:

dotnet test –logger “trx;LogFileName=UnitTestResultfile.trx”

我可以使用下列命令编辑测试结果文件

cat UnitTestResultfile.trx

docker-compose文件

Compose是一个用于定义和运行多容器Docker应用程序的工具。借助Compose,你可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。https://docs.docker.com/compose/

所以让我们创建一个docker-compose-unit-tests文件

docker-compose-unit-tests文件

该文件用于构建和运行镜像logcorner-edusync-speech-domain-unit-test,它使用单元测试Dockerfile。

然后创建并启动镜像logcorner.edusync.speech.domain.unittest

docker-compose.override-unit-tests文件

这个文件覆盖了docker-compose-unit-tests文件,所以我添加了一个ASPNETCORE_ENVIRONMENT和一个入口点来运行单元测试

构建单元测试项目

要构建单元测试项目,我可以运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml build

构建将创建一个镜像logcorner-edusync-speech-domain-unit-test:latest。

让我们使用以下命令以交互模式运行镜像logcorner-edusync-speech-domain-unit-test:latest:

docker run –rm -it logcorner-edusync-speech-domain-unit-test:latest

ls -la

让我们运行单元测试

dotnet test –logger “trx;LogFileName=.\domain-tests\tests-results-domain.xml”

ls -la

cd TestResults

ls -la

cd domain-tests

ls

我应该在名为tests-results-domain.xml的容器中看到一个文件

我可以使用以下命令编辑tests-results-domain.xml文件。

cat tests-results-domain.xml

exit

然后如果我再次启动容器,tests-results-domain.xml文件应该消失。

docker run –rm -it logcorner-edusync-speech-domain-unit-test:latest

ls -la

发布测试结果

因为当容器停止运行时测试结果文件(tests-results-domain.xml)消失了,所以我必须在docker容器和主机之间共享tests-results-domain.xml文件。

因此,我将在主机上创建一个文件夹,并将其映射到docker容器内包含测试结果的文件夹。

我必须在docker-compose文件中添加这样的卷:

volumes:
    – ./TestResults/tests-results-domain:/domain-tests

并且,我在容器的domain-tests和主机的tests-results-domain之间创建了一个卷映射。

volumes:
– ./tests-results-domain:/domain-tests

运行单元测试项目

要运行单元测试,我必须运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml up

我应该在主机上创建一个tests-results-domain文件夹,这个文件夹应该包含测试结果。

在我的CI/CD管道中,我将使用主机上的TestResults文件夹来发布测试结果

容器化其他UnitTest项目

为了容器化其他单元测试项目(infrastructure, presentation, application),我遵循与领域单元测试相同的场景

你可以在这里找到整个docker-compose-unit-tests.yml和docker-compose.override-unit-tests.yml文件

要构建和运行所有单元测试,我必须运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml build

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml up

源代码可在此处获得:

https://github.com/logcorner/LogCorner.EduSync.Speech.Command/tree/Task/DockerUnitTesting

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122788
 
454 次点击