Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Docker容器中运行应用程序单元测试_Python 3.x_Docker - Fatal编程技术网

Python 3.x 在Docker容器中运行应用程序单元测试

Python 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

我最近开始使用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 . .

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/*