如何在容器内正确配置pytest环境并执行测试?
解决容器内测试环境不一致的方案
方案1:直接在运行中的容器内安装兼容测试依赖
容器本身已具备Python 3.6.9和pandas 0.22.0,无需在外部虚拟环境折腾,直接在容器内安装适配Python 3.6的pytest版本即可:
- 进入目标运行容器(替换
your-container为实际容器名):docker exec -it your-container /bin/bash - 安装支持Python 3.6的pytest版本(pytest 7.x及以上不再兼容Python 3.6,选择6.x系列):
pip install pytest<7.0 - 将本地测试用例复制到容器内,或用挂载方式同步(见方案3),然后执行测试:
pytest /path/to/your/test_files/
方案2:修改Dockerfile,预构建带测试环境的镜像
若需反复测试,把测试依赖集成到镜像里更高效:
- 在原Dockerfile末尾添加指令,安装指定版本的测试依赖:
# 安装适配Python3.6的pytest版本 RUN pip install pytest<7.0 # 若容器原本未预装pandas0.22.0,补充以下行: # RUN pip install pandas==0.22.0 - 重新构建镜像:
docker build -t your-image-with-tests . - 启动容器后,直接在容器内运行pytest测试脚本。
方案3:挂载本地测试目录到容器,临时安装依赖测试
不想修改镜像或永久改动容器的话,通过挂载同步本地测试代码:
- 启动容器时挂载本地测试目录(替换
./tests为本地测试路径,/app/tests为容器内目标路径):docker run -it -v $(pwd)/tests:/app/tests your-image /bin/bash - 在容器内安装pytest<7.0并执行测试:
pip install pytest<7.0 pytest /app/tests/
测试完成后停止容器,不会在镜像中留下多余依赖。
补充:用Poetry在容器内锁定依赖版本
若坚持使用Poetry,在容器内初始化环境并锁定版本:
- 进入容器后,安装适配Python3.6的Poetry版本(Poetry 2.x不再支持Python3.6,选择1.x系列):
pip install poetry<2.0 - 在项目目录创建
pyproject.toml,明确依赖版本:[tool.poetry] name = "your-project" version = "0.1.0" python = "^3.6" [tool.poetry.dependencies] pandas = "==0.22.0" [tool.poetry.dev-dependencies] pytest = "<7.0" - 执行
poetry install安装依赖,随后用poetry run pytest启动测试。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

