在 Docker 容器内运行应用程序单元测试

Cyb*_*unk 6 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 . .

ENTRYPOINT ["python", "./run.py"]
Run Code Online (Sandbox Code Playgroud)

我有一些使用 pytest 调用的单元测试。我在想如何将它包含在 docker 容器中,以便单元测试可以在 docker 容器内运行。我应该为它建立一个不同的形象。您对此有何建议。

jas*_*sim 8

你可以给

RUN python -m unittest test_file_name.py
Run Code Online (Sandbox Code Playgroud)

或者

RUN python -m unittest tests/*
Run Code Online (Sandbox Code Playgroud)


小智 5

docker exec <name_container> python -m unittest discover
Run Code Online (Sandbox Code Playgroud)


Mic*_* B. 1

您可以编写另一个 Dockerfile 来更改入口点,也可以在使用以下命令运行 Dockerfile 时覆盖入口点

docker run --entrypoint
Run Code Online (Sandbox Code Playgroud)

如果您的命令需要参数,请确保在图像名称之后传递它们

docker run --entrypoint "pytest" image_name arg1 arg2 ...
Run Code Online (Sandbox Code Playgroud)

  • (恕我直言,需要“docker run --entrypoint”有点尴尬。在原始问题的 Dockerfile 中,您可以将“ENTRYPOINT”更改为“CMD”,这样就不需要该选项“docker run image_name pytest arg1 ...”。但这假设测试文件在图像中,但它们不一定在图像中。) (2认同)