python - 在 Dockerfile 中运行 py.test
问题描述
我有这个包含一行的 Dockerfile RUN py.test -vv
。
FROM bitnami/python:3.6-prod
#MORE DIRECTIVES
RUN py.test -vv
COPY . /files
WORKDIR /files
EXPOSE 8080
当我运行时docker-compose build
,我收到此错误。
Step 16/21 : RUN py.test -vv
---> Running in 5b3f55f10025
============================= test session starts ==============================
platform linux -- Python 3.6.9, pytest-5.2.1, py-1.8.0, pluggy-0.13.0 -- /opt/bitnami/python/bin/python
cachedir: .pytest_cache
rootdir: /
plugins: ordering-0.6, cov-2.8.1, docker-compose-3.1.2, celery-4.3.0
collecting ... collected 0 items / 1 errors
==================================== ERRORS ====================================
________________________ ERROR collecting test session _________________________
opt/bitnami/python/lib/python3.6/site-packages/_pytest/config/__init__.py:456: in _importconftest
return self._conftestpath2mod[key]
E KeyError: PosixPath('/opt/bitnami/python/lib/python3.6/site-packages/matplotlib/tests/conftest.py')
During handling of the above exception, another exception occurred:
opt/bitnami/python/lib/python3.6/site-packages/_pytest/config/__init__.py:462: in _importconftest
mod = conftestpath.pyimport()
opt/bitnami/python/lib/python3.6/site-packages/py/_path/local.py:701: in pyimport
__import__(modname)
opt/bitnami/python/lib/python3.6/site-packages/matplotlib/tests/__init__.py:16: in <module>
'The baseline image directory does not exist. '
E OSError: The baseline image directory does not exist. This is most likely because the test data is not installed. You may need to install matplotlib from source to get the test data.
During handling of the above exception, another exception occurred:
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:377: in visit
for x in Visitor(fil, rec, ignore, bf, sort).gen(self):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:418: in gen
dirs = self.optsort([p for p in entries
opt/bitnami/python/lib/python3.6/site-packages/py/_path/common.py:419: in <listcomp>
if p.check(dir=1) and (rec is None or rec(p))])
opt/bitnami/python/lib/python3.6/site-packages/_pytest/main.py:606: in _recurse
ihook = self.gethookproxy(dirpath)
opt/bitnami/python/lib/python3.6/site-packages/_pytest/main.py:424: in gethookproxy
my_conftestmodules = pm._getconftestmodules(fspath)
opt/bitnami/python/lib/python3.6/site-packages/_pytest/config/__init__.py:434: in _getconftestmodules
mod = self._importconftest(conftestpath)
opt/bitnami/python/lib/python3.6/site-packages/_pytest/config/__init__.py:470: in _importconftest
raise ConftestImportFailure(conftestpath, sys.exc_info())
E _pytest.config.ConftestImportFailure: (local('/opt/bitnami/python/lib/python3.6/site-packages/matplotlib/tests/conftest.py'), (<class 'OSError'>, OSError('The baseline image directory does not exist. This is most likely because the test data is not installed. You may need to install matplotlib from source to get the test data.',), <traceback object at 0x7f814caaef88>))
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 1 error in 11.83s ===============================
ERROR: Service 'testproject' failed to build: The command '/bin/sh -c py.test -vv' returned a non-zero code: 2
我尝试添加pip install matplotlib
Dockerfile,但仍然遇到相同的错误。
我之前有一个 NodeJS 应用程序,它也是 Dockerized 的,它使用mocha
和放入Dockerfile 进行了一些测试,RUN mocha
工作正常。我不确定 Python 中的问题是什么。
解决方案
我觉得这里的问题是因为pytest没有预先安装在python中。因此,您必须在 docker 容器中添加 pytest 安装步骤。就我个人而言,我一直在为 pytest 使用单独的 dockerfile 来运行它,该文件用于安装 ENTRYPOINT 并将其设置为 pytest。
我附上了 docker-compose.yaml、dockerfile 和 pytest.dockerfile 供您参考。或者,您可以直接在 .yaml 文件/dockerfile 本身中提及 pytest 安装步骤,因为您无需添加任何其他服务并避免额外的 dockerfile。这个设置对我来说非常适合使用 docker 容器运行 Selenium-pytest 测试自动化。请试试这个,让我们知道反馈。
version: '3.7'
services:
test:
volumes:
- .:/files
build:
context: .
dockerfile: pytest.dockerfile
docker-compose.yaml
FROM python:3.7-alpine
MAINTAINER xyz
ADD . /files
WORKDIR /files
ENV PYTHONDONTWRITEBYTECODE=true
EXPOSE 4444
码头文件。公开端口的选项在这里再次是可选的。
FROM python:3.7-alpine
MAINTAINER xyz
RUN pip install pytest
ENTRYPOINT [ "pytest" ]
pytest.dockerfile
推荐阅读
- java - 我想编写一个代码来使用 java 验证不同类型的日期,但是带有 T 和 Z 的日期仍然显示 Invalid
- python - 如何使 Power Bi 网站版中的 python 图表看起来像桌面版?
- php - 命名空间声明中的别名命名空间,而不是 PHP 中的命名空间导入可能吗?
- numpy - 在 Julia 中破坏 Iterator.product
- angular - 如何编写登录服务的单元测试用例
- shopify - 使用 Alteryx Designer 下载工具从 shopify 中检索所有产品
- google-apps-script - 使用 Google Apps 脚本对服务器错误进行错误处理
- kubernetes - 为什么 kubernetes pvc resize 不能与文件系统一起使用?
- android - 微调器列表未在android中显示
- c - GDB 卡在“配置 GDB 中止配置 GDB”