我正在设置一个dockerised selenium网格。我可以通过附加到pytest容器[见下面]发送我的python测试[用pytest运行]。 但是我已经设置了另一个控制pytest的LAMP容器。 所以我想让pytest容器独立,运行空闲并等待来自LAMP容器的命令。
我有这个Dockerfile:
# Starting from base image
FROM ubuntu
#-----------------------------------------------------
# Set the Github personal token
ENV GH_TOKEN blablabla
# Install Python & pip
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y python python-pip python-dev && pip install --upgrade pip
# Install nano for #debugging
RUN apt-get install -y nano
# Install xvfb
RUN apt-get install -y xvfb
# Install GIT
RUN apt-get update -y && apt-get install git -y
# [in the / folder]
RUN git clone https://$GH_TOKEN:x-oauth-basic@github.com/user/project.git /project
# Install dependencies via pip
WORKDIR /project
RUN pip install -r dependencies.txt
#-----------------------------------------------------
#
CMD ["/bin/bash"]
我手动启动pytest容器[用于开发]:
docker run -dit -v /project --name pytest repo/user:py
问题是我完成了开发,我希望从docker-compose
启动pytest容器并将其连接到其他容器[带链接和卷]。
我无法让它熬夜。
我用过这个:
pytest:
image: repo/user:py
volumes:
- "/project"
command: "/bin/bash tail -f /dev/null"
但没有工作。
那么,在Dockerfile中,我应该使用特定的CMD还是ENTRYPOINT?
我应该使用command
文件中的一些docker-compose
吗?
答案 0 :(得分:2)
我不确定你的测试是如何执行的,但我认为我有类似的用例。您可以在Envoy project和cmd.sh a sample test中查看我是如何做到的。
以下是我运行测试的方法。我也在使用pytest,但这并不重要: 1.使用docker-compose调出堆栈,不进行测试 2.等待堆栈为请求做好准备。对我来说,这意味着民意调查200响应 3.单独运行测试容器,但确保它使用与撰写堆栈相同的网络。
这可以通过多种方式完成。您可以将所有内容放在Bash脚本中,并从主机控制它。
在我的例子中,我是从Python容器中完成的。它有点包围,但想法是有一个主机启动的Python测试容器。然后容器本身使用compose将堆栈重新调回主机(dockerception)。然后在测试容器中运行pytest测试。完成后,它会组合堆栈并推送返回代码。
答案 1 :(得分:1)
我最近刚刚在我的一个项目中启用了它。我使用多阶段构建。目前我将测试放在与源 test_*.py
相同的文件夹中。根据我的经验,这感觉不自然,我更喜欢将测试放在默认情况下排除的自己的文件夹中。
FROM python:3.7.6 AS build
WORKDIR /app
COPY requirements.txt .
RUN pip3 install --compile -r requirements.txt && rm -rf /root/.cache
COPY src /app
# TODO precompile
# Build stage test - run tests
FROM build AS test
RUN pip3 install pytest pytest-cov && rm -rf /root/.cache
RUN pytest --doctest-modules \
--junitxml=xunit-reports/xunit-result-all.xml \
--cov \
--cov-report=xml:coverage-reports/coverage.xml \
--cov-report=html:coverage-reports/
# Build stage 3 - Complete the build setting the executable
FROM build AS final
CMD [ "python", "./service.py" ]
为了从覆盖范围中排除测试文件。 .coveragerc
必须存在。
[run]
omit = test_*
test
目标运行所需的测试并生成覆盖率和执行报告。这些不适用于 Azure DevOps 和 SonarQube。使其适合
sed -i~ 's#/app#$(Build.SourcesDirectory)/app#' $(Pipeline.Workspace)/b/coverage-reports/coverage.xml
运行测试
#!/usr/bin/env bash
set -e
DOCKER_BUILDKIT=1 docker build . --target test --progress plain
答案 2 :(得分:0)
首先,您必须使用“泊坞窗图像”获取图像列表。 然后观看列表并确保您的图像存在。 因此,使用“docker run”运行您的泊坞窗图像。
不要忘记这个注意事项:您必须在DockerFile中使用CMD与容器一起运行pytest。