Python 3.x 在Docker容器中运行应用程序单元测试
我最近开始使用docker,并将一个python应用程序容器化。我使用了下面的DockerfilePython 3.x 在Docker容器中运行应用程序单元测试,python-3.x,docker,Python 3.x,Docker,我最近开始使用docker,并将一个python应用程序容器化。我使用了下面的Dockerfile FROM python:3.6.5 # working directory WORKDIR /usr/src/app # copy requirement file to working directory COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . ENTRYP
FROM python:3.6.5
# working directory
WORKDIR /usr/src/app
# copy requirement file to working directory
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENTRYPOINT ["python", "./run.py"]
我使用pytest调用了一些单元测试。我在考虑如何将其包含在docker容器中,以便单元测试可以在docker容器中运行。我应该为它建立一个不同的形象吗。您对此有何建议。您可以编写另一个Dockerfile来更改入口点,也可以在使用命令运行Dockerfile时覆盖入口点
docker run --entrypoint
如果命令需要参数,请确保在图像名称后传递参数
docker run --entrypoint "pytest" image_name arg1 arg2 ...
我不知道你的应用程序的规模是多少,为什么你想使用Docker?仅仅因为您的应用程序正在Docker中运行,并不意味着您也应该在Docker中运行测试 从最低的努力到最高的努力,您可以检查以下几个选项 在本地运行测试 使用Python虚拟环境 如果您正在考虑不破坏本地依赖关系,并且正是出于这个目的,您希望使用Docker,那么您可以使用venv并在那里运行测试
$ python3 -m venv venv
$ . venv/bin/activate
$ python3 -m unittest tests/*
然后您可以删除目录或虚拟环境
使用詹金斯或类似工具
如果你正在写一个严肃的项目,这是一个理想的解决方案。Jenkins(或类似工具)支持作业的停靠运行。每次您想要运行作业时,Jenkins都会创建一个docker容器。
您只需指定要发出的命令,它可能与第一个选项中的命令一样简单。这里有一个链接 (需要
docker运行的人——entrypoint
有点尴尬。在原始问题的Dockerfile中,您可以将entrypoint
更改为CMD
以不需要该选项,docker run image\u name pytest arg1…
。但这假设测试文件在映像中,它们不一定在映像中。)我建议构建时使用“测试”阶段,安装测试的依赖项并执行测试。参考此meh,我使用docker
进行所有测试(包括测试)-并非每个人都安装了python
/python3
,但在紧要关头,任何人都可以使用docker
执行测试,并且之后很容易将其包含在管道中,尤其是在jenkins
多个构建节点中。(pita安装每个节点,即,ansible
,packer
+AWS等,可能但仍然如此)-1 docker的优点之一是,我可以使用docker映像支持的依赖项而不是我的开发机器从头开始重新创建环境。例如,我使用Ubuntu创建docker并在其上运行测试,而我的机器是MacOSX,没有必要的依赖项版本。虽然你说的是真的,但这里我们并不是在讨论Docker的优势。人们使用一些核心操作系统依赖项的项目很少。因为OP没有提到这一点,所以我认为每次运行测试时创建Docker是过分的,IMHO。如果是这样的话,那么我给出了更合适的Jenkins选项。
$ python3 -m venv venv
$ . venv/bin/activate
$ python3 -m unittest tests/*